1

ウィンドウを表示してそのテキストを印刷する方法は?whileループをオンにすると、ウィンドウが表示されなくなります。

import sys
import datetime
import time
from PyQt4 import QtCore, QtGui

class Main(QtGui.QMainWindow):
  def __init__(self, parent=None):
    super(Main, self).__init__(parent)       
    self.b = QtGui.QPushButton("exit", self, clicked=self.close)
    self.c = QtGui.QLabel("Test", self)

if __name__ == "__main__":
  app=QtGui.QApplication(sys.argv)
  myapp=Main()
  myapp.show()     
  while True:
    time.sleep(2)
    print "Print this + Show the Window???!!!"
  sys.exit(app.exec_())

試した:

import sys
import datetime
import time
from PyQt4 import QtCore, QtGui

class Main(QtGui.QMainWindow):
  def __init__(self, parent=None):
    super(Main, self).__init__(parent)       
    self.b = QtGui.QPushButton("exit", self, clicked=self.close)
    self.c = QtGui.QLabel("Test", self)

  def myRun():
    while True:
      time.sleep(2)
      print "Print this + Show the Window???!!!"      

if __name__ == "__main__":
  app=QtGui.QApplication(sys.argv)
  myapp=Main()
  myapp.show()     

  thread = QtCore.QThread()
  thread.run = lambda self: myRun()
  thread.start()    
  sys.exit(app.exec_())

出力:

TypeError :()は正確に1つの引数を取ります(0が与えられます)

4

2 に答える 2

2

いくつかの問題:1)スレッドを正しく呼び出したり初期化したりしていない。2)他のスレッドの実行中にイベントの処理を続行するようにメインスレッドに指示する必要があります。3)ラベルが[終了]ボタンにカーソルを合わせているため、クリックできなくなります。

import sys
import datetime
import time
from PyQt4 import QtCore, QtGui

class Main(QtGui.QMainWindow):
  def __init__(self, parent=None):
    super(Main, self).__init__(parent)       
    self.b = QtGui.QPushButton("exit", self, clicked=self.close)

  def myRun(self):
    while True:
      time.sleep(2)
      print "Print this + Show the Window???!!!"      

if __name__ == "__main__":
  app=QtGui.QApplication(sys.argv)
  myapp=Main()
  myapp.show()     

  thread = QtCore.QThread()
  thread.run = lambda myapp=myapp: myapp.myRun()
  thread.start()    

  app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app, QtCore.SLOT("quit()"))

  sys.exit(app.exec_())

  while thread.isAlive():
    #Make sure the rest of the GUI is responsive
    app.processEvents()
于 2012-05-31T14:41:38.797 に答える
0

lambda self: myRun()グローバル関数を呼び出そうとしますmyRun()。試す

lambda myapp=myapp: myapp.myRun()

代わりは。奇数の割り当てでは、デフォルトのパラメーターが取得さthread.run()れないため、デフォルトのパラメーターが作成されます。

于 2012-05-31T14:36:13.800 に答える