如何解决在GUI中运行func1时如何运行func2?
首先,对不起我的英语。
嗨,我正在尝试使用Python PyQt5(Qt设计器)制作电机控制界面。
如果单击某个按钮运行一个功能,则GUI窗口无响应。因此,我不能再按其他任何按钮。
我发现解决方案可能与QThread
或DemonThread
有关,但我没有成功。
from PyQt5.QtWidgets import *
from PyQt5 import uic
from PyQt5.QtCore import *
import time
form_class = uic.loadUiType("Test_GUI3.ui")[0]
# class Thread1(QThread):
# def __init__(self,parent):
# super().__init__(parent)
# def RUN(self):
# print("you made it!")
class MyWindow(QMainWindow,form_class):
def __init__(self):
super().__init__()
self.setupUi(self)
self.test.clicked.connect(self.TEST)
self.test_2.clicked.connect(self.TEST_2)
def TEST(self):
while True:
print("cheer up")
time.sleep(1)
def TEST_2(self):
print("you made it!")
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
myWindow = MyWindow()
myWindow.show()
sys.exit(app.exec_())
如果单击“测试”按钮,则会运行while循环。但是GUI(“ MainWindow”)没有响应。
我想要这样。
- 单击“测试”按钮。
- 单击“ test_2”按钮并停止“ TEST”功能,然后运行“ TEST_2”功能。
感谢您阅读。
解决方法
首先,嘿Uidos,您的英语没有冒犯性,您实际上说得很好。现在,开始做生意...
您需要在每个函数中创建一个if语句:
func1 = func2 = False
def TEST(self):
func1 = True
func2 = False
if func1 == True:
print("cheer up")
time.sleep(1)
def TEST_2(self):
func1 = False
func2 = True
if func2 == True:
print("you made it!")
现在让我解释一下...该代码的作用是,当单击一个按钮时,它会将该功能的状态更改为true,而将另一个状态更改为false ... if语句基本上意味着该功能将不会如果它为假,则执行,从而创建一种方法来杀死另一个函数。您的while语句无法按您希望的方式工作,因为您从未提供过使函数为假的方法,因此,当您单击按钮时,该函数始终为true。此外,while True
不是正确使用的术语,因为它会检查名为“ True”的变量是否为true。因此,基本上,您甚至只是告诉python检查未定义的变量是否为true,并且显然为false。不过,您的想法是正确的,因为您可以将我的if语句替换为while循环,这样会更加干净和Pythonic。
希望这对您有所帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。