pyqt - 从不同文件的函数更新小部件文本

时间:2013-09-13 02:19:40

标签: python function user-interface pyqt

我使用qtdesigner创建了gui表单,并使用pyuic4转换为python代码。我的主要脚本示例如下:

#!/usr/bin/env python

from PyQt4 import QtGui
from multibootusb_ui import Ui_Dialog
import sys
import os
import another_file_function
class AppGui(QtGui.QDialog,Ui_Dialog):

    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.close.clicked.connect(self.close)
        another_file_function.function2()

    def function1():
        self.ui.text_label.setText("some text")
    function1()

app = QtGui.QApplication(sys.argv)
window = AppGui()
ui = Ui_Dialog()
window.show()
sys.exit(app.exec_())

为了方便起见,我在不同的文件中创建了不同的功能。这样任何时候都可以随时访问它。

以下是another_file_function的函数示例:

#!/usr/bin/env python

def function2():
  #code here
  self.ui.text_label.setText("some text")

来自主脚本的function1和来自another_file_function的function2是相同的。我也从主类调用function2。问题是,当我从主脚本使用function1()时,它会更新GUI文本而不会出现问题。但是,如果我在不同的文件中使用相同的函数并从主脚本调用该函数它无法更新,我得到global name 'self' is not defined错误。

我哪里出错了?任何帮助都是适当的。

谢谢。

1 个答案:

答案 0 :(得分:0)

我不清楚为什么function1也能正常工作,我假设它的定义中有self你放弃了。

要让function2工作,您需要执行以下操作:

其他档案:

def function2(input):
    #code here
    input.ui.text_label.setText("some text")

主文件:

#!/usr/bin/env python

from PyQt4 import QtGui
from multibootusb_ui import Ui_Dialog
import sys
import os
import another_file_function
class AppGui(QtGui.QDialog,Ui_Dialog):

    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.close.clicked.connect(self.close)
        another_file_function.function2()

    def function1(self):
        self.ui.text_label.setText("some text")
    function1()

app = QtGui.QApplication(sys.argv)
window = AppGui()
another_file_function.function2(window)
window.function1()
window.show()
sys.exit(app.exec_())