Форум сайта python.su
4kpt_VА, так Вы модуль целиком имели в виду. Ну, естественно, там не все гладко. Он слишком большой, чтобы его за раз нормально переписать. А я имел в виду то, что было процитировано.
По существу…
4kpt_VНу это типа alias. Мне хочется иметь одинаковые названия для схожих методов для разных виджетов, например, одинаковые show и close для Tk, Toplevel, Text и пр. Что касается Root, то да, это alias целиком. Ну а другие - Top, TextBox, Entry еще снабжены всякими примочками по умолчанию. Это чтобы километры простыней не писать. Я просто вызову TextBox, а в нем будут уже и скроллбары, и кнопки (если нужно), и даже проверка правописания.
Зачем переименовывать существующие методы?
4kpt_VЭто торчат уши старого кода, который я писал еще до того, как выучил классы. Оставлено для совместимости. Будет время - дойду и до него.
Вас эта часть кода не смущает?
4kpt_VOK. Допустим, есть сложный виджет: Toplevel, на нем сидят 2 TextBox. В 1-м - английский текст (TextBox только для чтения), во 2-м текста нет (TextBox с возможностью правки). Определенная фраза, найденная в 1-м TextBox, выделяется определенным цветом. Во 2-м пользователь вводит перевод этой фразы. Когда он закончил перевод фразы, он нажимает кнопку или хоткей. Кнопка или хоткей вызывают обновление виджета, программа выдает следующую фразу на перевод. Естественно, всего может быть задумано не 2 TextBox, а больше, что еще больше усложнит интерфейс.
При этом Вы не хотите их destro'ить, а хотите… Короче. Реально не понятно. Давайте, может, в картинках.
Офлайн
Подождите. Т.е. вы задачу переходов внутри виджетов решаете их скрытием/закрытием с реиспользованием?
Офлайн
4kpt_VЕсли вы имеете в виду переход с одного виджета на другой, то да. Я стараюсь заранее создать виджеты, так чтобы они отличались только шапкой, текстом и т.п., т.е. чтобы можно было не перепаковывать. Разумеется, если между виджетами есть серьезные отличия, то я их считаю разнотипными, создаю заранее и использую повторно. Единственное окно, которое я разрушаю - это root (непосредственно перед выходом).
Подождите. Т.е. вы задачу переходов внутри виджетов решаете их скрытием/закрытием с реиспользованием?
Отредактировано vanvanov (Фев. 19, 2017 23:51:20)
Офлайн
нет. Я имею ввиду переходы по тексту. Выделения и т.п. вы решаете перезагрузкой окон?
Офлайн
4kpt_VПри переходе в пределах одного виджета его перезагрузка не требуется. Происходит обращение к классу с логикой, затем виджет обновляется. Пример:
нет. Я имею ввиду переходы по тексту. Выделения и т.п. вы решаете перезагрузкой окон?
#!/usr/bin/python3 from sharedGUI import Widgets, Top, TextBox, create_binding, Geometry class Data: def __init__(self): self.i = 0 self.maxi = 6 self.data = [] self.create() def create(self): for i in range(self.maxi): self.data.append('Text %d' % i) def add(self): if self.i >= 0 and self.i < self.maxi - 1: self.i += 1 else: self.i = 0 def get(self): return self.data[self.i] class SuperWidget: # Требует 'data', 'widgets' в качестве глобальных переменных def __init__(self): self.parent_obj = Top(parent_obj=widgets.root()) Geometry(parent_obj=self.parent_obj).set('400x300') self.obj = TextBox(parent_obj=self.parent_obj,Composite=True) self.obj.focus() self.widget = self.obj.widget create_binding(widget=self.widget,bindings=['<Return>','<KP_Enter>'],action=self.update) self.reset() def show(self,*args): self.obj.show() def reset(self): self.obj.clear_text() self.obj.insert(text=data.get()) self.obj.title(text=data.get()) def update(self,*args): data.add() self.reset() if __name__ == '__main__': widgets = Widgets() widgets.start() data = Data() SuperWidget().show() widgets.end()
Офлайн
Честно. Я просто не пойму вопроса. Помочь в этом случае мне нечем… Честно. Я пытался
Офлайн
4kpt_V
Честно. Я просто не пойму вопроса.
В этом случае код зависает на этапе wait_variable.Код приведен в 1-м сообщении.
Офлайн
Короче, выяснилось, что
h_widgets = Widgets()
if __name__ == '__main__':
Офлайн