为了账号安全,请及时绑定邮箱和手机立即绑定

在 PyQt5 中制作循环

在 PyQt5 中制作循环

郎朗坤 2023-12-29 17:09:40
我正在尝试制作一个内部有循环的程序。我认为问题在于循环启动程序只是在其中循环。代码 -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"))        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_())```
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

  1. 不要修改 Qt Designer 生成的代码,而是创建另一个从适当的小部件继承的类,并使用初始类来填充它。

  2. while 循环阻塞接口,使用 QTimer 或额外的线程、信号和槽。

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"))



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

https://img1.sycdn.imooc.com/658e8d6b0001f68904770308.jpg

查看完整回答
反对 回复 2023-12-29
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信