私の問題は明確に表現するのがやや難しいため、このトピックに適した「質問」の見出しを考えるのに、認めるよりも長い時間を費やしました。
状況を簡単にまとめると次のようになります。
- Python 3.4 と PySide で基本的な GUI を作成しています
- QFileSystemWatcher を使用して特定のファイルを監視しています
- ファイルが変更されると、QFileSystemWatcher がメソッドを呼び出し、そのメソッドが PySide クラス内のメソッドを呼び出します。
- PySide Class メソッドで詳述されている GUI 固有のアクションが実行されていないことを除いて、上記のすべてが完全に機能しているように見えます (以下で詳しく説明します)。
コード例:
#Establishing the PySide GUI Class
class GUI(QMainWindow, Ui_GUI):
def __init__(self, parent=None)
super(GUI, self).__init__(parent)
self.setupUi(self)
QtCore.QObject.connect(self.Button, QtCore.SIGNAL("clicked()"), self.Run)
def Run(self):
print("1")
self.treeWidget1.clear()
self.treeWidget2.clear()
print("2")
self.label1.setText("Text 1")
self.label2.setText("Text 2")
print("3")
for y in range(0, 5):
self.treeWidget1.resizeColumnsToContents()
print("Finished")
#Establish the file monitoring mechanism, *outside* the PySide class
def FileChanged():
Script = GUI()
Script.Run()
Paths = ['path/to/file']
Watch = QtCore.QFileSystemWatcher(Paths)
Watch.fileChanged.connect(FileChanged)
#Setting up the GUI
if __name__ == '__main__':
app = QApplication(sys.argv)
showGUI = GUI()
showGUI.show()
app.exec_()
上で述べたように、上記のコードはエラーを返しません。ファイル (パスにリストされている) を変更すると、FileChanged は実際に GUI クラスから Run() メソッドを呼び出します。ただし、実際には「もの」は何も実行せず、「もの」の間で印刷コマンドのみを実行します。
次に、GUI の「ボタン」をクリックすると、Run() が正しく実行され、すべての「もの」が正しく実行されます。
私の質問: ここで何か足りないものはありますか? メソッドが正しく呼び出され、さまざまな「印刷」コマンドを実行できる場合、実際の「もの」を実行しないのはなぜですか?
ありがとう!
編集 1: -do stuff- タグを削除し、いくつかのサンプル コードを挿入しました。すべての「スタッフ」コードは、さまざまな PySide QLabels、QTreeWidgets などの更新に関連しています。
編集 2: treeWidget の clear コマンドの最後にある () を忘れてしまいました。