2017-01-24 2 views
0

Ich versuche, einen Timer für die Planung zu verwenden, um bestimmte Werte im Grid zu aktualisieren. Unten ist das Beispiel, in dem ich versuche, ein Label basierend auf einem zeitgesteuerten Ereignis zu aktualisieren. Ich habe es geschafft, die Funktion aufzurufen, aber ich kann das Etikett nicht aktualisieren. Irgendwelche Gedanken?Aktualisieren von PyQT-Label

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 

from PyQt5 import QtCore, QtGui, QtWidgets 

class App(QWidget): 

    def __init__(self): 
     super().__init__() #these values change where the main window is placed 
     self.title = 'This is my title' 
     self.left = 400 
     self.top = 400 
     self.width = 300 
     self.height = 200 
     self.initUI() 


    def initUI(self): 
     self.setWindowTitle(self.title) 
     self.setGeometry(self.left, self.top, self.width, self.height) 

     # call the gridlayout function 
     self.createGridLayout() 
     self.time_label.text = 'change the value' 
     windowLayout = QVBoxLayout() 
     windowLayout.addWidget(self.horizontalGroupBox) 
     self.setLayout(windowLayout) 
     self.show() #this sets the main window to the screen size 

    def createGridLayout(self): 
     time = self.getTime() 
     self.time_label = QLabel(time, self) 

     self.horizontalGroupBox = QGroupBox() 
     layout = QGridLayout() 
     layout.addWidget(QPushButton('1'),0,0) 
     layout.addWidget(QPushButton(time),0,1) 
     layout.addWidget(self.time_label,0,2) 
     self.horizontalGroupBox.setLayout(layout) 
    def getTime(self): 
     time = QTime.currentTime().toString() 
     return time 

    def updateTime(): 
     App.time = QTime.currentTime().toString()  
     time = QTime.currentTime().toString() 
     print("Time: " + time) 
     # self.time_label = 'change the value' 
     # self..layout.time_label = 'asdf' 
     return time 


def main(): 
    app = QApplication(sys.argv) 
    ex = App() 

    timer=QtCore.QTimer() 
    timer.timeout.connect(App.updateTime) 
    timer.start(1000) 

    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    # App.main() 
    main() 

Antwort

0

Ihr Code hat einige Fehler, wenn Sie ein Attribut der Klasse mit dem reservierten Wort self verwenden möchten, ist diese Methode muss eine Methode der Klasse sein, denn dies ändert:

def updateTime(): 

zu

def updateTime(self): 

Wenn Sie den Text eines QLabel ändern Sie seine setText() verwenden.

import sys 
from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 


class App(QWidget): 
    def __init__(self, parent=None): 
     super(App, self).__init__(parent=parent) # these values change where the main window is placed 
     self.title = 'This is my title' 
     self.left = 400 
     self.top = 400 
     self.width = 300 
     self.height = 200 
     self.initUI() 

    def initUI(self): 
     self.setWindowTitle(self.title) 
     self.setGeometry(self.left, self.top, self.width, self.height) 

     # call the gridlayout function 
     self.createGridLayout() 
     self.time_label.text = 'change the value' 
     windowLayout = QVBoxLayout() 
     windowLayout.addWidget(self.horizontalGroupBox) 
     self.setLayout(windowLayout) 
     self.show() # this sets the main window to the screen size 

    def createGridLayout(self): 
     time = self.getTime() 
     self.time_label = QLabel(time, self) 
     self.horizontalGroupBox = QGroupBox() 
     layout = QGridLayout() 
     layout.addWidget(QPushButton('1'), 0, 0) 
     layout.addWidget(QPushButton(time), 0, 1) 
     layout.addWidget(self.time_label, 0, 2) 
     self.horizontalGroupBox.setLayout(layout) 

    def getTime(self): 
     time = QTime.currentTime().toString() 
     return time 

    def updateTime(self): 
     time = QTime.currentTime().toString() 
     print("Time: " + time) 
     self.time_label.setText(time) 
     return time 


def main(): 
    app = QApplication(sys.argv) 
    ex = App() 

    timer = QTimer() 
    timer.timeout.connect(ex.updateTime) 
    timer.start(1000) 

    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

enter image description here

enter image description here

+0

wirkt wie ein Zauber! Vielen Dank –

Verwandte Themen