QFileDialog открытие проводника и выбор файла
При помощи Qt Designer создал дизайн. И теперь пытаюсь прописать логику.
Не могу понять как правильно записать действие по клику. Уже кучу всего перепробовал. Либо вовсе перестает запускаться приложение, либо запускается, но по клику вылетает сразу же.
main.py:
from checker import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
import sys
class Cheker(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show()
self.btn_download.addAction(self.add_file)
@QtCore.pyqtSlot()
def add_file(self):
action = self.sender()
if action.btn_download():
fname = QFileDialog.getOpenFileName(self)[0]
f = open(fname, 'r')
with f:
data = f.read()
self.tableWidget.setItem(data)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
check = Cheker()
sys.exit(app.exec_())
checker.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(553, 379)
MainWindow.setMouseTracking(True)
MainWindow.setStyleSheet("background-color: rgb(217, 217, 217);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btn_download = QtWidgets.QPushButton(self.centralwidget)
self.btn_download.setGeometry(QtCore.QRect(30, 10, 111, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.btn_download.setFont(font)
self.btn_download.setStyleSheet("background-color: rgb(255, 255, 255);")
self.btn_download.setObjectName("btn_download")
self.btn_clear = QtWidgets.QPushButton(self.centralwidget)
self.btn_clear.setGeometry(QtCore.QRect(160, 10, 111, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.btn_clear.setFont(font)
self.btn_clear.setMouseTracking(False)
self.btn_clear.setAutoFillBackground(False)
self.btn_clear.setStyleSheet("background-color: rgb(255, 255, 255);")
self.btn_clear.setObjectName("btn_clear")
self.result_viev = QtWidgets.QListView(self.centralwidget)
self.result_viev.setGeometry(QtCore.QRect(380, 170, 141, 41))
font = QtGui.QFont()
font.setPointSize(12)
self.result_viev.setFont(font)
self.result_viev.setStyleSheet("background-color: rgb(255, 255, 255);")
self.result_viev.setObjectName("result_viev")
self.status_viev = QtWidgets.QListView(self.centralwidget)
self.status_viev.setEnabled(False)
self.status_viev.setGeometry(QtCore.QRect(380, 250, 141, 41))
self.status_viev.setStyleSheet("background-color: rgb(255, 255, 255);")
self.status_viev.setObjectName("status_viev")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(380, 140, 111, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(380, 220, 111, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setUnderline(False)
font.setWeight(75)
font.setStrikeOut(False)
font.setKerning(True)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(380, 60, 101, 51))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setUnderline(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton.setStyleSheet("border-color: rgb(188, 0, 0);\n"
"background-color: rgb(255, 255, 255);")
self.pushButton.setObjectName("pushButton")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(10, 60, 361, 311))
self.tableWidget.setStyleSheet("background-color: rgb(244, 244, 244);")
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.btn_download, self.btn_clear)
MainWindow.setTabOrder(self.btn_clear, self.result_viev)
MainWindow.setTabOrder(self.result_viev, self.status_viev)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "FB - чекер "))
self.btn_download.setText(_translate("MainWindow", "Загрузить"))
self.btn_clear.setText(_translate("MainWindow", "Очистить"))
self.label.setText(_translate("MainWindow", "Код с почты"))
self.label_2.setText(_translate("MainWindow", "Статус"))
self.pushButton.setText(_translate("MainWindow", "СТАРТ"))
Буду признателен
Ответы (1 шт):
Кнопка излучает сигнал clicked(), когда она активируется мышью,
пробелом или сочетанием клавиш.
Подключитесь к этому сигналу, чтобы выполнить действие кнопки.
Сигналы и слоты используются для связи между объектами. Механизм сигналов и слотов является центральной особенностью Qt и, вероятно, той частью, которая больше всего отличается от функций, предоставляемых другими фреймворками.
Я не знаю для чего вы решили использовать виджет QTableWidget
и что вы туда решили записывать,
поэтому я заменил его на виджет QTextEdit.
Я улучшил написание статической функции getOpenFileName()
q1411810.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from checker import Ui_MainWindow
class Cheker(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.show()
# ??? self.btn_download.addAction(self.add_file)
self.btn_download.clicked.connect(self.add_file) # !!! +++
@QtCore.pyqtSlot()
def add_file(self):
# ??? action = self.sender()
# ??? if action.btn_download():
fname, filetype = QFileDialog.getOpenFileName(
self,
"Open file",
".",
"Python Files (*.py);;Text Files(*.txt)"
)
if fname:
# f = open(fname, 'r')
# with f:
with open(fname, 'r', encoding='utf-8') as f:
data = f.read()
# ??? self.tableWidget.setItem(data)
self.textEdit.setText(data)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
check = Cheker()
sys.exit(app.exec_())
checker.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(553, 379)
MainWindow.setMouseTracking(True)
MainWindow.setStyleSheet("background-color: rgb(217, 217, 217);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.btn_download = QtWidgets.QPushButton(self.centralwidget)
self.btn_download.setGeometry(QtCore.QRect(30, 10, 111, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.btn_download.setFont(font)
self.btn_download.setStyleSheet("background-color: rgb(255, 255, 255);")
self.btn_download.setObjectName("btn_download")
self.btn_clear = QtWidgets.QPushButton(self.centralwidget)
self.btn_clear.setGeometry(QtCore.QRect(160, 10, 111, 31))
font = QtGui.QFont()
font.setPointSize(10)
font.setBold(True)
font.setWeight(75)
self.btn_clear.setFont(font)
self.btn_clear.setMouseTracking(False)
self.btn_clear.setAutoFillBackground(False)
self.btn_clear.setStyleSheet("background-color: rgb(255, 255, 255);")
self.btn_clear.setObjectName("btn_clear")
self.result_viev = QtWidgets.QListView(self.centralwidget)
self.result_viev.setGeometry(QtCore.QRect(380, 170, 141, 41))
font = QtGui.QFont()
font.setPointSize(12)
self.result_viev.setFont(font)
self.result_viev.setStyleSheet("background-color: rgb(255, 255, 255);")
self.result_viev.setObjectName("result_viev")
self.status_viev = QtWidgets.QListView(self.centralwidget)
self.status_viev.setEnabled(False)
self.status_viev.setGeometry(QtCore.QRect(380, 250, 141, 41))
self.status_viev.setStyleSheet("background-color: rgb(255, 255, 255);")
self.status_viev.setObjectName("status_viev")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(380, 140, 111, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(380, 220, 111, 16))
font = QtGui.QFont()
font.setPointSize(12)
font.setBold(True)
font.setUnderline(False)
font.setWeight(75)
font.setStrikeOut(False)
font.setKerning(True)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(380, 60, 101, 51))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setUnderline(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.pushButton.setStyleSheet("border-color: rgb(188, 0, 0);\n"
"background-color: rgb(255, 255, 255);")
self.pushButton.setObjectName("pushButton")
'''
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(10, 60, 361, 311))
self.tableWidget.setStyleSheet("background-color: rgb(244, 244, 244);")
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
'''
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(10, 60, 361, 311))
self.textEdit.setStyleSheet("background-color: rgb(244, 244, 244);")
self.textEdit.setObjectName("textEdit")
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.setTabOrder(self.btn_download, self.btn_clear)
MainWindow.setTabOrder(self.btn_clear, self.result_viev)
MainWindow.setTabOrder(self.result_viev, self.status_viev)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "FB - чекер "))
self.btn_download.setText(_translate("MainWindow", "Загрузить"))
self.btn_clear.setText(_translate("MainWindow", "Очистить"))
self.label.setText(_translate("MainWindow", "Код с почты"))
self.label_2.setText(_translate("MainWindow", "Статус"))
self.pushButton.setText(_translate("MainWindow", "СТАРТ"))

