1

私の問題は明確に表現するのがやや難しいため、このトピックに適した「質問」の見出しを考えるのに、認めるよりも長い時間を費やしました。

状況を簡単にまとめると次のようになります。

  • 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 コマンドの最後にある () を忘れてしまいました。

4

1 に答える 1