Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt5可以';t在单独的ui文件中使用预定义的小部件_Python_Python 3.x_Pyqt_Pyqt5_Qt Designer - Fatal编程技术网

Python PyQt5可以';t在单独的ui文件中使用预定义的小部件

Python PyQt5可以';t在单独的ui文件中使用预定义的小部件,python,python-3.x,pyqt,pyqt5,qt-designer,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).__i

我在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)
致:

注意:通常在使用
小部件模板时,它将该元素命名为
表单
,将设计类命名为
Ui\u表单
,因此您应该使用
QWidget
作为类基础

完整代码:

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_())

是的,我知道它应该是ui,但它不起作用,所以我有点绝望了。@SS2你基于Qt Designer的模板是什么:MainWindow、Dialog还是Widget?看得好一点,我发现你从来没有使用过
Main
classHaha,我只是犯了一个愚蠢的错误,没有运行Main()。谢谢
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_())