PyQt5不能在单独的ui文件中使用预定义的小部件

时间:2017-05-20 11:36:46

标签: python python-3.x pyqt pyqt5 qt-designer

我遇到了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_())

这里有一些来自我自动生成的gui文件的代码,使用pyuic:

self.exit = QtWidgets.QPushButton(Form)
self.exit.setGeometry(QtCore.QRect(375, 270, 115, 27))
self.exit.setObjectName("exit")

这个相同的程序在Qt4之前对我有用,所以我不明白为什么它在这里不起作用?

1 个答案:

答案 0 :(得分:1)

您必须使用ui属性才能访问该按钮。你必须改变:

if type(of: abc) == type(of: def) {
    print("matching type")
} else {
    print("something else")
}

为:

self.Ui_Form.exit.clicked.connect(self.handle)

注意:通常在使用self.ui.exit.clicked.connect(self.handle) 时,它会将该元素命名为Widget template,将设计类命名为form,因此您应该使用Ui_Form 1}}作为类基础。

完整代码:

QWidget