2016-12-06 55 views
0

由於我是PyQt中的新手,我試圖通過動態改變表格單元格的顏色來解決問題 - 幫助是非常值得歡迎的。PyQT動態地自動改變表格部件的顏色屬性

功能testFunction應該改變tableWidget顏色如果for循環在陣列發現1或0是否有可能設置該屬性?盒子應該每2秒鐘自動改變顏色而不需要任何額外的動作。檢查下面的代碼...

import sys, os 
from PyQt4 import QtGui, QtCore 

class MainWindow(QtGui.QWidget): 

    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.setWindowTitle("Hello!") 
     self.tableWidget = QtGui.QTableWidget() 
     self.tableItem = QtGui.QTableWidgetItem() 
     self.tableWidget.resize(400,250) 
     self.tableWidget.setRowCount(1) 
     self.tableWidget.setColumnCount(1) 
     self.tableWidget.setItem(0,0, QtGui.QTableWidgetItem("START TOOL")) 
     self.tableWidget.item(0,0).setBackground(QtGui.QColor(100,100,150)) 

     realLayout = QtGui.QVBoxLayout() 
     realLayout.addWidget(tableWidget) 
     self.setLayout(realLayout) 
     self.testFunction() 

    def testFunction(self) : 
     a = [1,0,1,1,1,1,1,0,0,0,0,0,1] 
     for i in range(0,len(a)) : 
      if a[i] == 1 : 
       self.tableWidget.item(0,0).setBackground(QtGui.QColor(100,100,100)) 
      else : 
       self.tableWidget.item(0,0).setBackground(QtGui.QColor(0,255,0))  
      time.sleep(2) 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = MainWindow() 
    GUI.show() 
    sys.exit(app.exec_()) 

if __name__ == '__main__' : 
    main() 
+0

因爲你您的代碼不工作需要先將數據添加到你的tableWidget中。目前,你的tableWidget是空的。這裏是一個簡單的[示例](https://pythonspot.com/en/qt4-table/),介紹如何添加數據。你也需要有一個對'tableWidget'的引用,用於'self.tableWidget'。 – SyedElec

+0

謝謝@SyedElec。我已根據您的建議修改代碼。現在我仍然需要自動分配顏色並將其更改爲表格單元格。主要想法是,更改數組「a」中的項目應該會導致實時更改背景顏色。 –

+0

@IvanB如何更改數組「a」? – eyllanesc

回答

0

您必須更改realLayout.addWidget(tableWidget)realLayout.addWidget(self.tableWidget)和你不應該使用「休眠」,必須創建一個定時器(QTimer

import sys, os 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtCore import QTimer 


class MainWindow(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.setWindowTitle("Hello!") 
     self.tableWidget = QtGui.QTableWidget() 
     self.tableItem = QtGui.QTableWidgetItem() 
     self.tableWidget.resize(400, 250) 
     self.tableWidget.setRowCount(1) 
     self.tableWidget.setColumnCount(1) 
     self.tableWidget.setItem(0, 0, QtGui.QTableWidgetItem("START TOOL")) 
     self.tableWidget.item(0, 0).setBackground(QtGui.QColor(100, 100, 150)) 

     realLayout = QtGui.QVBoxLayout() 
     realLayout.addWidget(self.tableWidget) 
     self.setLayout(realLayout) 
     self.counter = 0 
     self.a = [1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1] 
     self.testFunction() 

     timer = QTimer(self) 
     timer.timeout.connect(self.testFunction) 
     timer.start(2*1000) 

    def testFunction(self): 
     self.counter += 1 
     self.counter %= len(self.a) 
     if self.a[self.counter]: 
      self.tableWidget.item(0, 0).setBackground(QtGui.QColor(100, 100, 100)) 
     else: 
      self.tableWidget.item(0, 0).setBackground(QtGui.QColor(0, 255, 0)) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    GUI = MainWindow() 
    GUI.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 
+0

@SyedElec它仍然不起作用。當程序到達定時器時,testFunction在for循環中執行整個迭代過程,而不是一步一步地執行。一步一步地給表格單元格帶來閃爍效果,所以我預計在達到定時器之後,testFunction只執行[0]迭代並在2秒後改變表格單元格的顏色,在[2]之後只改變一個[1]和等等,並改變每種狀態的顏色... –

+0

@SyedElec更新我的解決方案 – eyllanesc

+0

@ eyllanesc這是完美的!謝謝!這個問題可能會被關閉! –