Передача переменной в диалог
Мне нужно передать сообщение в диалог об ошибке, чтобы отобразить его пользователю.
Первая попытка
PreferencesDialog.py
dlgError = ErrorDialog ('Have you been messing with the configuration files?')
dlgError.run ()
ErrorDialog.py
global message = None
def __new__(cls, msg):
builder = get_builder('ErrorDialog')
new_object = builder.get_object('error_dialog')
new_object.finish_initializing(builder)
global message
message = msg
return new_object
def finish_initializing(self, builder):
# Get a reference to the builder and set up the signals.
self.builder = builder
self.ui = builder.get_ui(self)
global message
self.builder.get_object ('lblMessage').set_text (message)
Вторая попытка
PreferencesDialog.py
dlgError = ErrorDialog ()
dlgError.message = 'Have you been messing with the configuration files?'
dlgError.run ()
ErrorDialog.py
global message = None
def __new__(cls):
builder = get_builder('ErrorDialog')
new_object = builder.get_object('error_dialog')
new_object.finish_initializing(builder)
return new_object
def finish_initializing(self, builder):
# Get a reference to the builder and set up the signals.
self.builder = builder
self.ui = builder.get_ui(self)
global message
self.builder.get_object ('lblMessage').set_text (message)
Оба выдают одно и то же исключение;
self.builder.get_object ('lblMessage').set_text (message)
NameError: global name 'message' is not defined
Пожалуйста помогите. Я использую Quickly, GTK 3 и Python 2.7.
2 ответа
Почему бы не сделать message
член экземпляра класса, установив его в __init__
?
def __init__(self, msg):
self._message = msg
def finish_initializing(self, builder):
self.builder.get_object("lblMessage").set_text(self._message)
Я установил диалоговое окно, в котором передал свой диалог переменной, чтобы поместить текст в поле ввода. Хитрость заключается в том, чтобы передать переменную в new, а затем, когда вызывается метод finish.initializing(), поместить ее туда. Вот код:
class QuerynameDialog(Gtk.Dialog):
__gtype_name__ = "QuerynameDialog"
def __new__(cls, name):
"""Special static method that's automatically called by Python when
constructing a new instance of this class.
Returns a fully instantiated QuerynameDialog object.
"""
builder = get_builder('QuerynameDialog')
new_object = builder.get_object('queryname_dialog')
new_object.finish_initializing(builder,name)
return new_object
def finish_initializing(self, builder,name):
"""Called when we're finished initializing.
finish_initalizing should be called after parsing the ui definition
and creating a QuerynameDialog object with it in order to
finish initializing the start of the new QuerynameDialog
instance.
"""
# Get a reference to the builder and set up the signals.
self.builder = builder
self.ui = builder.get_ui(self)
self.builder.get_object('name_entry').set_text(name)