2013-09-13 2 views
0

Я создал форму gui с помощью qtdesigner и преобразован в код python с помощью pyuic4. Образец моего основного сценария выглядит следующим образом:pyqt - Обновление текста виджета из функции из другого файла

#!/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 от главного сценария и function2 из another_file_function одинаковы. Также я вызываю функцию2 из основного класса. Проблема в том, что когда я использую function1() из основного скрипта, он обновляет текст графического интерфейса без проблем. Однако, если я использую одну и ту же функцию в другом файле и вызываю эту функцию из основного сценария, она не обновляется, и я получаю ошибку global name 'self' is not defined.

Где я ошибаюсь? Любая помощь предоставляется.

спасибо.

ответ

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_()) 
+0

Ok. Вы правы, я забыл включить себя. Однако, когда я запускаю скрипт после модификации, я все равно получаю 'объект не имеет атрибута 'ui''. Если вы можете предложить какое-то объяснение, это поможет мне понять концепцию. Это всего лишь запрос. –

+0

Это означает, что объект, над которым вы работаете, не имеет атрибута 'ui'. Измените свой вопрос, чтобы показать, что вы сейчас пытаетесь. – tacaswell

Смежные вопросы