Найти - Пользователи
Полная версия: Проект с множеством окон: оптимальная структура, обращение к объектам?
Начало » Python для новичков » Проект с множеством окон: оптимальная структура, обращение к объектам?
1
DHT
Всем привет!
Не так давно изучаю Python, точнее пытюсь сразу же перенести свой проект с Delphi на Python, но возникли некоторые вопросы.

Допустим в Делфи когда создаешь новую форму, то для доступа ко всем объектам этой формы нужно прописать модуль в uses, а затем использовать конструкцию FormName.ObjectName.Attribute. В 2-х словах плиз как правильно это сделать в Питоне?

Сейчас новые окна создаются при помощи объектов Toplevel(root) в главном модуле и по скольку все процедуры записаны в одном модуле, то проблем с доступом к объектам нет, но как разнести создание окон в отдельные модули и при этом иметь доступ к атрибутам объекта?
Андрей Светлов
Они просто есть - без объявлений :)
Называется Duck Typing
DHT
погугил на тему “Duck Typing” и что-то не понял как привязать это к ответу на мой вопрос. Вы уж простите если не понял с полуслова, можно немного подробнее о моей задаче?
Андрей Светлов
На самом деле это совсем просто.
У вас есть класс
class A(object):
def f(self):
pass
есть экземпляр этого класса
a = A()
теперь вы вызываете a.f()
что происходит?
питон берет у объекта a атрибут по имени f. Получает bound method object. Потом применяет круглые скобки (вызывает метод __call__). И все. Объявление класса для этого не требуется.

Примерно так же работает COM IDispatch интерфейс.
Griffon
Вы разнесёте не обьекты, а классы. Сами же обьекты, наиболее вероятно, вы будете создавать внутри одного и того же модуля.
DHT
Ага теперь понял… понял, что вопрос сформулировал неверно :)
Объясню на примере на чем зациклился:


1. Есть главное окно со своими виджетами

from tkinter import *

root = Tk()

label_note = ttk.Label(root)
label_note['text'] = u'примечение'
label_note.pack()

root.mainloop()
2. Есть еще одно окно

toplevel_change = Toplevel(root)
toplevel_change.transient(root)
в котором есть кнопка к которой привязана команда редактирования атрибута ‘text’ виджета label_note из главного окна

button_change = ttk.Button(toplevel_change, command=change_label)
button_change['text'] = 'Change'
button_change.pack()
Все это разумется схематически. Так как вынести создание 2-го окна и все функции, привязываемые к событиям в этом окне, в отдельный модуль?
Rodegast
Просто передавай объект основного окна второму как параметр, а во втором окне обращайся не к текущему объекту (self), а к объекту основного окна.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB