在Python/PySide中调用类方法
我花了比我愿意承认的时间更长的时间来思考一个适合这个主题的“问题”,因为我的问题有点难以表达 以下是情况的简要总结:在Python/PySide中调用类方法,python,pyside,qfilesystemwatcher,Python,Pyside,Qfilesystemwatcher,我花了比我愿意承认的时间更长的时间来思考一个适合这个主题的“问题”,因为我的问题有点难以表达 以下是情况的简要总结: 我正在用Python3.4和PySide编写一个基本的GUI 我正在使用QFileSystemWatcher监视特定文件 当文件更改时,QFileSystemWatcher调用一个方法,该方法反过来调用PySide类中的一个方法 除了PySide类方法中详述的GUI特定操作没有被执行之外,上述所有操作似乎都工作得很好(我将在下面更详细地解释) 示例代码: #Establish
- 我正在用Python3.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(),并正确执行所有“东西”
我的问题是:这里有我遗漏的东西吗?如果它正确地调用了方法,并且能够执行各种“print”命令,那么为什么它不执行实际的“stuff”
谢谢
编辑1:我删除了-do-stuff-tag,并加入了一些示例代码。所有“stuff”代码都与更新各种PySide Qlabel、QTreeWidgets等相关
编辑2:我忘记了treeWidget clear命令末尾的() 如果在信号触发时调用
Run
插槽,它将正确执行所有更改,但您将看不到任何更改,因为Script
将在显示之前被删除
为了让示例脚本开始有意义,需要将其重新安排为如下内容:
#Setting up the GUI
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
showGUI = GUI()
#Establish the file monitoring mechanism, *outside* the PySide class
def FileChanged():
showGUI.Run()
Paths = ['path/to/file']
Watch = QtCore.QFileSystemWatcher(Paths)
Watch.fileChanged.connect(FileChanged)
showGUI.show()
app.exec_()
当然,您的真实代码可能与您问题中的示例完全不同(该示例有许多其他错误阻止它运行),因此这可能没有帮助。但如果是这种情况,您必须发布一个完整的、自包含的示例,正确地演示您遇到的问题。如果它打印1、2和3,但不执行任何内容,那么您需要显示这些内容是什么。这很可能是他们的错。这很公平,但如果他们不工作,肯定会出现错误?至少,它会停止执行,从而阻止它打印以下“打印”?所有的“stuff”命令都与清除qtreewidget、填充qlabel等相关。这完全取决于代码。如果不引发异常,代码可以很容易地不满足您的需要!说得好!不幸的是,我当前的IDE没有调试器,所以我无法单步执行,但我已经用一些示例代码更新了原始帖子。我还将FileChanged调用重新定向到一个Test()方法,只使用了一个命令(清除QTreeWidget),但仍然不起作用。
self.treeWidget1.clear
最后需要()
,否则我怀疑它不会起作用self.label1.setText(“Text 1”)
应该可以工作,只要self.label1
存在并且是标签
,您可以通过执行print self.label1
检查它是否打印出
。您是一位绅士和学者!你贴的每件事都很有意义。我已经重新编写了GUI设置(按照上面的说明),现在GUI会根据需要进行更新。非常感谢!