2016-07-16 3 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

좋아 내가 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

@ekhumoro 귀하의 의견에 감사드립니다.이 접근법은 내가 요구했던 것보다 훨씬 직관적 인 것처럼 보입니다. – alkey