Форум сайта python.su
Пусть на новом окне создается виджет Label:
def window_1(self):
self.toplevel = Toplevel(root)
self.note = Label(self.toplevel)
self.note['text'] = '1'
def window_2(self):
self.toplevel = Toplevel(root)
self.note = Label(self.toplevel)
self.note['text'] = '2'
self.window_1()
self.window_2()
self.note['text'] = '3'
"ИМЯ_ОКНА.ИМЯ_ВИДЖЕТА"
Офлайн
Пробовали использовать параметр textvariable и переменную StringVar?
egg = StringVar()
Label(…, textvariable=egg, …)
Label(…, textvariable=egg, …)
egg.set(new_text)
Офлайн
Это если вам надо менять одновременно оба.
А если вам надо красивый доступ, то определяйте окна классами наследованными от Frame.
Отредактировано (Ноя. 16, 2009 22:40:41)
Офлайн
GriffonВсе верно. Нужен именно красивый доступ и красивая организации виджетов.
А если вам надо красивый доступ
Офлайн
Пробовал делать сам, вот что получается:
1) Есть класс главного окна class Application(Frame), в функции __init__ которого вызывается фукнкция рисования главного окна.
2) Его наследуют другие классы для новых окон class Window1(Application), class Window2(Application) в которых переписывается __init__, чтобы не создавать главное окно еще раз, а также вызываются функции рисования новых окон.
Проблема в том, что т.о. из класов Window1 и Window2 нет доступа к виджетам класса Application. Ну только если все виджеты изначально прописсать в __init__, т.е. сделать их свойством класса Application, что помоему не красиво.
Подскажите как правильно или покажите пример, или подкиньте ссылку на опенсорс скрипт где это точно есть.
Спасибо.
Отредактировано (Ноя. 17, 2009 16:15:41)
Офлайн
Вообще я погорячился.
Для красивых имён достаточно:
self.F1 = Frame(self)
self.F1.F1 = Frame(self.F1)
self.F1.F1.F1 = Frame(self.F1.F1)
Ну и в таком духе.
То есть:
def window_1(self):
self.toplevel1 = Toplevel(root)
self.toplevel1.note = Label(self.toplevel1)
self.toplevel1.note['text'] = '1'
Офлайн
Griffon, спасибо.
Такой вараинт уже предложил друг в аське, но в нем есть недостаток: имена функции в каждом окне должны быть по прежнему уникальными да и довольно громоздкой может оказаться запись: self.ИМЯ_ОКНА.ИМЯ_ВИДЖЕТА.
Офлайн
Тогда пишите окна как классы, а не как функции.
class window1(Toplevel):
def __init__(self, master=None):
Toplevel.__init__(self, master)
# Дальше пошли виджеты.
Офлайн