2016-12-06 29 views
0

私はPyQtで新しくなったので、テーブルセルの色を動的に変更する問題を解決しようとしています。ループためは、配列内の1を発見した場合テーブルウィジェットの色のプロパティを動的に変更するPyQT

機能testFunctionはtableWidgetの色を変更する必要がありますまたは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(self.tableWidget)realLayout.addWidget(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秒後に変更します。それで、すべての州の色を変えてください... –

+0

@SyedElec私の解決策を更新 – eyllanesc

+0

@ eyllanescそれは完璧です!ありがとう!この問題は終了する可能性があります。 –

関連する問題