我想做什么:
到目前为止:
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的标题)是否已经存在?