Python3
尝试运行一些执行以下操作的代码:
我尝试过先启动应用程序并使用应用程序启动线程-不幸的是,我对QtWidgets不太熟悉。
这是代码:
import time
import sys
import threading
from PyQt5.QtWidgets import *
def main():
pass
# THREADING Function 1
def print_interval( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print( "%s: %s" % ( threadName, tm.ctime(time.time()) ))
#THREADING Function 2
def startAPP():
app = QApplication([])
app.setStyle('Fusion')
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
layout.addWidget(QFontDialog('Left'))
window.setLayout(layout)
window.show()
app.exec_()
if __name__ == '__main__':
for x in range(0, 4):
sys.stdout.write('\r'+"Loading" + "." * x)
time.sleep(1)
main()
# Create two threads as follows
try:
thread1 = threading.Thread()
thread1.target = print_interval('name',4)
thread1.start()
thread2 = threading.Thread()
thread2.target = startAPP()
thread2.start()
except:
print("Error: unable to start thread")
while 1:
pass
您至少有以下错误:
对于目标,您不得传递评估函数,但它是可调用的函数(在您的情况下,目标是评估函数。
出于设计原因,Qt禁止在辅助线程上运行GUI,因此第二个线程是不必要的,您必须更改它而不是True。
QFontDialog希望将QFont或QWidget或两者都作为参数,而不是字符串。
import time
import sys
import threading
from PyQt5.QtWidgets import *
def main():
pass
# THREADING Function 1
def print_interval(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%s: %s" % (threadName, time.ctime(time.time())))
# THREADING Function 2
def startAPP():
app = QApplication([])
app.setStyle("Fusion")
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton("Top"))
layout.addWidget(QPushButton("Bottom"))
layout.addWidget(QFontDialog())
window.setLayout(layout)
window.show()
app.exec_()
if __name__ == "__main__":
for x in range(0, 4):
sys.stdout.write("\r" + "Loading" + "." * x)
time.sleep(1)
main()
# Create two threads as follows
try:
thread = threading.Thread(target=print_interval, args=("name", 1))
thread.start()
except:
print("Error: unable to start thread")
startAPP()