__init__
私はアプリケーションの状態を制御するためにtickMain()
メソッドを呼び出しています。最初にStates.STATE_INIT
がこのメソッドに渡されます。つまりStates.STATE_IDLE
がtickMain()
に渡される前にstate_Init()
が呼び出されることを意味します。プログラムはtickMain()
を呼び出し続けます。このプロセスは正常に動作しているようです(print()
ステートメントが実行されています)。ただし、UIが初期化されていない、つまり表示されない(白い背景だけで、マウスカーソルが読み込みアイコンである)ように見えます。私は何が欠けていますか?別のスレッドからtickMain()
に電話する必要がありますか?起動時にPyQT UIが表示されない(別のスレッドが必要ですか?)
class CMyClass(QtGui.QMainWindow):
''''''''''''''''''''''''''''''''''''''''''
def __init__(self):
global state
while True:
self.tickMain()
time.sleep(1)
''''''''''''''''''''''''''''''''''''''''''
def tickMain(self):
global state
print("Ticking...")
switcher = { States.STATE_INIT: self.state_Init,
States.STATE_IDLE: self.state_Idle,
States.STATE_PROCESS_MSG_QUEUE: self.state_ProcessMsgQueue }
func = switcher.get(state, lambda: "nothing")
func()
''''''''''''''''''''''''''''''''''''''''''
def state_Init(self):
global state
print("Initializing...")
super(CMyClass, self).__init__()
print("Setting up COM port...")
self.com_serial = SerialCommsHandler.SerialCommsHandler()
print("Initializing UI...")
self.initUI()
print("Reading from COM port...")
state = States.STATE_IDLE
''''''''''''''''''''''''''''''''''''''''''
def initUI(self):
self.initMenuBar()
# Status Bar
sb_statusBar = self.statusBar()
# Send PushButton
self.btn_send = QtGui.QPushButton('Send', self)
self.btn_send.move(400, 245)
self.connect(self.btn_send, Qt.SIGNAL("clicked()"), self.slotMsgSend)
self.setGeometry(300, 300, 500, 400)
self.setFixedSize(650, 500)
self.setWindowTitle('My Test App')
self.show()
あなたは 'thickMain'メソッドの中で' self.tickMain() 'を呼び出すことによって無限ループを作成しませんか? – PYPL
@PYPL私は...それは愚かだった。私は今これを修正しました。しかし、私はまだ元の問題を抱えています。 – petehallw
これはまだ間違っています! 'thickMain'は値を返さなければならないので、' __init__'の 'while'ループはいつ停止するかを知っています!あなたはまだ無限ループ中です – PYPL