动态创建多个QtGui.QWidget

时间:2015-06-02 18:28:40

标签: python pyqt pyqt4

我想做什么:

  • 随时间变化的名称列表
  • 一个无限循环(“while True:”),它为列表中的每个名称创建一个QtGui.QWidget - 当列表中弹出一个新名称时 - >创建一个新的QtGui.QWidget

到目前为止:

    from PyQt4 import QtCore, QtGui
    import sys

    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s

    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)

    class Ui_Form(QtGui.QWidget):
        def __init__(self, player_name):
            self.player_name = player_name
            QtGui.QWidget.__init__(self)
            self.setupUi(self)

        def setupUi(self, Form):
        ...


    app = QtGui.QApplication(sys.argv)
    ex = Ui_Form('player_1')
    ex.show()
    sys.exit(app.exec_())

现在上面的代码可以很好地为'player_1'创建小部件。我也可以创建多个这样的Ui_Form,没有任何问题。

例如:

    app = HUD.QtGui.QApplication(sys.argv)
    ex_1 = HUD.Ui_Form('player_1')
    ex_2 = HUD.Ui_Form('player_2')
    ex_1.show()
    ex_2.show()
    sys.exit(app.exec_())

我现在的问题:有没有办法动态创建小部件?例如,在带有列表的for循环中:

    for player in player_list:
        app = QtGui.QApplication(sys.argv)
        ex = Ui_Form('player')
        ex.show()
        sys.exit(app.exec_())

“我知道上面的代码不正确,但它显示了这个想法。”

这是不可能的,因为“。exec_()”以及它在应用程序关闭之前阻塞的事实?

更新

根据Robert Jacobs的建议,我尝试为每个玩家使用单独的线程并且它可以工作。

这是我的代码:

from subprocess import call
from threading import Thread
import time, os

class myClassA(Thread):
    def __init__(self, player_name):
        Thread.__init__(self)
        self.daemon = True
        self.player_name = player_name
        self.start()

    def run(self):
        call(["python","Widget.py",self.player_name])

test_list = ['player_1','player_2']

for i in test_list:
    myClassA(i)
    time.sleep(1)

基本上我正在做的是在第二个脚本的单独线程中为每个玩家调用我的第一个脚本“widget.py”。

最后没有“time.sleep(1)”,只有两个窗口中的第一个打开,有什么想法吗?

有没有办法检查一个具有相同标题的窗口(window = player_name的标题)是否已经存在?

0 个答案:

没有答案