2016-07-16 1 views
0

これは私の以前の投稿の編集版です。私は家の窓にデジタル時計を置こうとしています。値を更新するのが難しいです。私は別のクラスで@pyqtSlot()メソッドを呼び出したチュートリアル1を見ましたが、私はメインウィンドウクラスで作業しているので、これを呼び出すことができず、時計はまったく表示されませんでした。以下、次のコードは、現在の時刻が表示されますが、クロックが更新されません。PyQt4のデジタル時計ウィジェットのアップデートに関する問題 - スロットと信号の呼び出し

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys 

class Window(QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(50,50,500,300) 
     self.home() 

    def home(self): 

     lcdNumber = QLCDNumber(self) 
     timer = QTimer() 
     lcdNumber.setDigitCount(8) 
     self.showTime(lcdNumber) 
     lcdNumber.connect(timer,SIGNAL("timeout()"),lcdNumber,SLOT("showTime()")) 
     timer.start(1000) 
     self.show() 


    @pyqtSlot() 
    def showTime(self,lcdNumber): 
     lcdNumber.display(QTime.currentTime().toString("hh:mm:ss")) 


def run():  
     app=QApplication(sys.argv) 
     GUI = Window() 
     sys.exit(app.exec_()) 

run() 

答えて

1

[OK]を、私はhereを見つけたいくつかのコードを使用して周りの仕事を見つけたので、私はまだシグナルとスロットの機能が動作して取得する方法がわかりませんよ。

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys 

from time import strftime 

class Window(QMainWindow): 

    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(50,50,700,300) 
     self.home() 

    def home(self): 

     self.timer =QTimer(self) 
     self.timer.timeout.connect(self.Time) 
     self.timer.start(1000) 

     self.lcd = QLCDNumber(self) 
     self.lcd.display(strftime("%H"+":"+"%M"+":"+"%S")) 
     self.lcd.setDigitCount(8) 

     self.show() 

    def Time(self): 
     self.lcd.display(strftime("%H"+":"+"%M"+":"+"%S"))  


def run():  
     app=QApplication(sys.argv) 
     GUI = Window() 
     sys.exit(app.exec_()) 

run() 
+0

あなたのソリューションは完全に正しいです - 私は確かにそれを「回避する」とは言いません。それが(元の例と比較して)動作する理由は、 'lcd'と' timer'への参照を保持しているからです。古いスタイルの信号とスロットの接続(これは非常にエラーを起こす可能性があります)を避けたことも良いことです。 – ekhumoro

+0

あなたのコメントに感謝しています。このアプローチは、私が求めていたことももっと簡単です。 – alkey

関連する問題