在 PyQt5 中制作循环

我正在尝试制作一个内部有循环的程序。我认为问题在于循环启动程序只是在其中循环。


代码 -


from PyQt5 import QtCore, QtGui, QtWidgets



class Ui_MainWindow(object):

    def setupUi(self, MainWindow):

        MainWindow.setObjectName("MainWindow")

        MainWindow.resize(319, 258)

        self.centralwidget = QtWidgets.QWidget(MainWindow)

        self.centralwidget.setObjectName("centralwidget")

        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)

        self.checkBox.setGeometry(QtCore.QRect(20, 60, 281, 51))

        self.checkBox.setObjectName("checkBox")

        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtWidgets.QMenuBar(MainWindow)

        self.menubar.setGeometry(QtCore.QRect(0, 0, 319, 21))

        self.menubar.setObjectName("menubar")

        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)

        self.statusbar.setObjectName("statusbar")

        MainWindow.setStatusBar(self.statusbar)


        self.retranslateUi(MainWindow)

        QtCore.QMetaObject.connectSlotsByName(MainWindow)


    def retranslateUi(self, MainWindow):

        _translate = QtCore.QCoreApplication.translate

        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

        self.checkBox.setText(_translate("MainWindow", "CheckBox"))



        self.checkBox.clicked.connect(self.potato)




    def potato(self, value):

        while self.checkBox.isChecked:

            print('potato')



if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)

    MainWindow = QtWidgets.QMainWindow()

    ui = Ui_MainWindow()

    ui.setupUi(MainWindow)

    MainWindow.show()

    sys.exit(app.exec_())```


郎朗坤
浏览 118回答 1
1回答

波斯汪

不要修改 Qt Designer 生成的代码,而是创建另一个从适当的小部件继承的类,并使用初始类来填充它。while 循环阻塞接口,使用 QTimer 或额外的线程、信号和槽。from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):    def setupUi(self, MainWindow):        MainWindow.setObjectName("MainWindow")        MainWindow.resize(319, 258)        self.centralwidget = QtWidgets.QWidget(MainWindow)        self.centralwidget.setObjectName("centralwidget")        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)        self.checkBox.setGeometry(QtCore.QRect(20, 60, 281, 51))        self.checkBox.setObjectName("checkBox")        MainWindow.setCentralWidget(self.centralwidget)        self.menubar = QtWidgets.QMenuBar(MainWindow)        self.menubar.setGeometry(QtCore.QRect(0, 0, 319, 21))        self.menubar.setObjectName("menubar")        MainWindow.setMenuBar(self.menubar)        self.statusbar = QtWidgets.QStatusBar(MainWindow)        self.statusbar.setObjectName("statusbar")        MainWindow.setStatusBar(self.statusbar)        self.retranslateUi(MainWindow)        QtCore.QMetaObject.connectSlotsByName(MainWindow)    def retranslateUi(self, MainWindow):        _translate = QtCore.QCoreApplication.translate        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))        self.checkBox.setText(_translate("MainWindow", "CheckBox"))class Demo(QtWidgets.QMainWindow, Ui_MainWindow):    def __init__(self):        super().__init__()        self.setupUi(self)        self.checkBox.clicked.connect(self.potato)                self.timer = QtCore.QTimer()        self.timer.timeout.connect(self.on_timer)    def potato(self, value):        if value:            self.timer.start(1000)        else:            self.timer.stop()                def on_timer(self):        print('potato')         if __name__ == "__main__":    import sys    app = QtWidgets.QApplication(sys.argv)    w = Demo()    w.show()    sys.exit(app.exec_())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python