【发布时间】:2014-12-03 23:03:06
【问题描述】:
我花了比我愿意承认的时间更长的时间为这个主题考虑一个合适的“问题”标题,因为我的问题有点难以表达。
这里是情况的快速总结:
- 我正在使用 Python 3.4 和 PySide 编写一个基本的 GUI
- 我正在使用 QFileSystemWatcher 来监视特定文件
- 当文件更改时,QFileSystemWatcher 调用一个方法,该方法又调用 PySide 类中的一个方法
- 除了 PySide 类方法中详述的特定于 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() 方法。但是,它实际上不会执行任何“stuff”,它只会在“stuff”之间执行打印命令。
如果我然后单击 GUI 中的“按钮”,它将正确执行 Run(),并正确执行所有“东西”。
我的问题:这里有什么我遗漏的吗?如果它正确调用了方法,并且能够执行各种“打印”命令,为什么它不执行实际的“东西”?
谢谢!
编辑 1:我删除了 -do stuff- 标签并放入了一些示例代码。所有“东西”代码都与更新各种 PySide QLabels、QTreeWidgets 等有关。
编辑 2:我忘记了 treeWidget 清除命令末尾的 ()。
【问题讨论】:
-
如果它正在打印 1、2 和 3 但没有做任何事情,那么你需要显示这些东西是什么。他们很可能是罪魁祸首。
-
这很公平,但是如果它们不工作,肯定会引发错误吗?至少,它会停止执行,从而阻止它打印以下“打印”?所有的“东西”命令都与清除 QTreeWidgets、填充 QLabels 等有关。
-
这完全取决于该代码。如果不引发异常,代码很容易不想要你想要的!
-
好点!不幸的是,我当前的 IDE 没有调试器,所以我无法逐步完成,但我已经用一些示例代码更新了原始帖子。我还将 FileChanged 调用重定向到 Test() 方法,只使用了一个命令(清除 QTreeWidget),但仍然不起作用。
-
self.treeWidget1.clear最后需要(),否则我怀疑它不会工作。self.label1.setText("Text 1")应该可以工作,前提是self.label1存在并且是label,您可以通过执行print self.label1来检查它是否打印出<PySide.QtGui.QLabel object at 0x.......>。
标签: python pyside qfilesystemwatcher