作为Python3中的线程启动窗口小部件应用程序?

问题描述 投票:0回答:1

Python3

尝试运行一些执行以下操作的代码:

  1. 使用线程模块创建两个线程。
  2. 从PyQt5.QtWidgets模块启动QApplication。

我尝试过先启动应用程序并使用应用程序启动线程-不幸的是,我对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
python python-3.x multithreading pyqt pyqt5
1个回答
0
投票

您至少有以下错误:

  • 对于目标,您不得传递评估函数,但它是可调用的函数(在您的情况下,目标是评估函数。

  • 出于设计原因,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()
© www.soinside.com 2019 - 2024. All rights reserved.