PyQt5 不能在单独的 ui 文件中使用预定义的小部件
PyQt5 can't use pre defined widgets in separate ui file
我在使用 PyQt5 时遇到问题,我有一个单独的 ui 文件(仍然是 python 文件而不是 .ui)我正在尝试连接一个按钮将位于该文件中但是由于某种原因这对我不起作用。
这是我的代码。
from PyQt5 import QtCore, QtGui, QtWidgets
from gui import Ui_Form
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.show()
self.Ui_Form.exit.clicked.connect(self.handle)
def handle(self):
self.print("hello")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
这是我使用 pyuic 自动生成的 gui 文件中的一些代码:
self.exit = QtWidgets.QPushButton(Form)
self.exit.setGeometry(QtCore.QRect(375, 270, 115, 27))
self.exit.setObjectName("exit")
我以前在 Qt4 中使用过同样的程序,所以我不明白为什么它在这里不起作用?
您必须使用 ui 属性来访问该按钮。您必须更改:
self.Ui_Form.exit.clicked.connect(self.handle)
至:
self.ui.exit.clicked.connect(self.handle)
注意:通常当使用 Widget template
时,它将该元素命名为 form
并将设计 class 命名为 Ui_Form
,所以你应该使用 QWidget
作为 class 基础。
完整代码:
class Main(QtWidgets.QWidget):
def __init__(self):
super(Main, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.show()
self.ui.exit.clicked.connect(self.handle)
def handle(self):
self.print("hello")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Main()
w.show()
sys.exit(app.exec_())
我在使用 PyQt5 时遇到问题,我有一个单独的 ui 文件(仍然是 python 文件而不是 .ui)我正在尝试连接一个按钮将位于该文件中但是由于某种原因这对我不起作用。 这是我的代码。
from PyQt5 import QtCore, QtGui, QtWidgets
from gui import Ui_Form
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.show()
self.Ui_Form.exit.clicked.connect(self.handle)
def handle(self):
self.print("hello")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
这是我使用 pyuic 自动生成的 gui 文件中的一些代码:
self.exit = QtWidgets.QPushButton(Form)
self.exit.setGeometry(QtCore.QRect(375, 270, 115, 27))
self.exit.setObjectName("exit")
我以前在 Qt4 中使用过同样的程序,所以我不明白为什么它在这里不起作用?
您必须使用 ui 属性来访问该按钮。您必须更改:
self.Ui_Form.exit.clicked.connect(self.handle)
至:
self.ui.exit.clicked.connect(self.handle)
注意:通常当使用 Widget template
时,它将该元素命名为 form
并将设计 class 命名为 Ui_Form
,所以你应该使用 QWidget
作为 class 基础。
完整代码:
class Main(QtWidgets.QWidget):
def __init__(self):
super(Main, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.show()
self.ui.exit.clicked.connect(self.handle)
def handle(self):
self.print("hello")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Main()
w.show()
sys.exit(app.exec_())