2012-07-26 12 views
3

상태 표시 줄 위젯을 업데이트하려면 어떻게해야합니까? 또한 어떻게 단추 대신 신호와 스레드를 사용할 수 있습니까? 감사!Pyqt 상태 표시 줄 위젯 업데이트

self.a = QtGui.QStatusBar.showMessage("System Status | Normal") 
    ver.addWidget(self.a) 

showMessage이되지 않습니다 : 당신은이 코드를

Error: 
    self.a = QtGui.QStatusBar.showMessage("System Status | Normal") 
    TypeError: QStatusBar.showMessage(QString, int msecs=0): first argument of unbound method must have type 'QStatusBar' 

from PyQt4 import QtGui,QtCore 
import sys 

class main_window(QtGui.QWidget): 
    def __init__(self,parent=None): 
     #Layout  
     QtGui.QWidget.__init__(self,parent) 
     self.bt=QtGui.QPushButton('crash') 
     self.lbl=QtGui.QLabel('count') 
     ver=QtGui.QHBoxLayout(self) 
     ver.addWidget(self.bt) 

     self.cnt=0 
     self.running=False 
     self.connect(self.bt,QtCore.SIGNAL("clicked()"),self.count) 

     self.a = QtGui.QStatusBar.showMessage("System Status | Normal") 
     ver.addWidget(self.a) 
     self.timer = QtCore.QTimer() 
     self.timer.timeout.connect(self.count) 
     # check every second 
     self.timer.start(1000*1)  

    def count(self): 
     a = open("connection_cpu.txt","r") 
     if a == "CPU Overclocked": 
      abnormal_label = QtGui.QLabel("System Status | Normal") 
      abnormal_label.setStyleSheet(' QLabel {color: red}') 
      QtGui.QStatusBar.addWidget(abnormal_label) 
      self.repaint() 
     else: 
      normal_label = QtGui.QLabel("System Status | Normal") 
      QtGui.QStatusBar.addWidget(normal_label) 
      self.repaint() 




if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    mw=main_window() 
    mw.show() 
    sys.exit(app.exec_()) 

답변

7

: 내가 버튼 아무것도가 온다 누를 때 누군가가 나를 도울 수있는, 내 코드가 작동하지 않습니다, 나는 또한 오류가 클래스 메서드를 사용하려면 QStatusBar 인스턴스가 필요합니다. 어쩌면

self.a = QtGui.QStatusBar(self) 
    ver.addWidget(self.a) 
    self.a.showMessage("System Status | Normal") 

QMainWindow를 서브 클래 싱하기 쉬울 것이다 : 나는 당신이하고 싶었던 생각? 그런 다음 QMainWindow.statusBar을 사용할 수 있습니다.

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 

     self.bt = QtGui.QPushButton('crash') 
     self.lbl = QtGui.QLabel('count') 

     self.cnt = 0 
     self.running = False 

     self.bt.clicked.connect(self.count) # new style signal/slot connection 

     # http://doc.qt.nokia.com/4.7-snapshot/qmainwindow.html#statusBar 
     self.statusBar().showMessage("System Status | Normal") 

     #Layout 
     vert_layout = QtGui.QHBoxLayout() 
     vert_layout.addWidget(self.bt) 
     self.main_widget = QtGui.QWidget(self) 
     self.main_widget.setLayout(vert_layout) 
     self.setCentralWidget(self.main_widget) 

     self.timer = QtCore.QTimer() 
     self.timer.timeout.connect(self.count) 
     # check every second 
     self.timer.start(1000*1) 


    def count(self): 
        a = open("connection_cpu.txt", "r").read() 
        if a == "CPU Overclocked": 
            abnormal_label = QtGui.QLabel("System Status | Normal")   
            abnormal_label.setStyleSheet(' QLabel {color: red}') 
            self.statusBar().addWidget(abnormal_label) 
            self.repaint() 
        else: 
            normal_label = QtGui.QLabel("System Status | Normal") 
            self.statusBar().addWidget(normal_label) 
            self.repaint()