Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > (Tkinter)КАК: Прогулка по своим формам ?


Автор: grock 25.7.2005, 18:54
У меня есть куча форм, надо их собрать в одно приложение, переходить c одной в другую, передавая при этом какие-то данные, чтобы потом работать с ними, должна быть возможность возвращаться на предыдущий этап, подскажите пожалуйста, как это лучше осуществить

Автор: grock 26.7.2005, 11:59
Немного конкретизирую вопрос (на самом деле выложу все вопросы что у меня накопились):
Я не хочу использовать Toplevel(), а просто вызывать друг из друга (т.е. чтобы перейти на другую форму, предварительно закрываем себя и вызываем другой класс с другой формой)

При таком коде возможно только с формы, которая в beg.py перейти на форму из cal.py, а если попытаться обратно ругается in Calibration.back [global name 'BegParam' is not defined]

и еще вопрос когда выполняется BegParam.cal

вылетает ошибка, хотя правда все работает нормально, т.е. создается форма из cal, котоая вот так вызывается self.z = Calibration(),
и еще вопрос почему она появляется ведь в ее класс не вызывется метод mainloop ?

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "D:\zzWork\My_PY\fale\beg.py", line 7, in cal
self.z = Calibration()
NameError: global name 'Calibration' is not defined
invalid command name ".11777128"
while executing
"$w cget -state"
(procedure "tk::ButtonDown" line 12)
invoked from within
"tk::ButtonDown .11777128"
(command bound to event)


и еще вопрос, когда делаем так:
from Tkinter import *
from beg import BegParam

Ругается что не может импортировать BegParam, почему ?
и кстати чем размличаются импорты:
import beg
от
from beg import *

====модуль beg.py====
Код

from Tkinter import *
from cal import *

class BegParam (Tk):
    def cal (self,event):
        self.destroy()
        self.z = Calibration()
    
    def __init__(self):
        Tk.__init__(self)
        self.title('begparam')
        b = Button (self , text = 'to cal')
        b.bind ("<Button>", self.cal)
        b.pack()
        
xx = BegParam()
xx.mainloop()


====модуль cal.py===
Код

from Tkinter import *
#from beg import BegParam
from beg import *

class Calibration (Tk):
    
    def __init__(self):
        Tk.__init__(self)
        e = Entry(self)
        e.pack()
        f = Button (self , text = 'back')
        f.bind("<Button>", self.back)
        f.pack()
        self.mainloop()
    def back (self,event):
        self.bb = BegParam () 

Автор: setq 26.7.2005, 13:59
я такого никогда не делал. хотел написать GUI на Tk, но у меня возникли трудности и я отложил это до лучших времён (надеюсь не до пенсии). поэтому дельного ничего не посоветую.

1.
Код
import X
импортирует всего одно имя X. если в модуле X есть переменная A, к ней можно обратиться так: X.A.
Код
from X import A, B
импортирует из модуля только имена A и B. имени X при этом видно не будет. если вместо A,B поставить * - будут импортированы все имена.
Код
>>> from os import getcwd
>>> getcwd ()
'C\\:boo'
>>> os.getcwd ()
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in ?
    os.getcwd ()
NameError: name 'os' is not defined
>>> 

2. информацию, которую надо передавать между окнами я бы наверно хранил в глобальных переменных...

3. теоретически можно написать функцию, которая разрушает переданное ей окно и открывает другое. оба окна можно передавать в параметрах. в форме связываем эту функцию с кнопкой BACK. вот.

4. наверно можно подключать модули рекурсивно. но я бы ни за что не стал это делать. впрочем я и ситуации такой не могу выдумать когда это могло бы быть полезным. я в твоём случае завёл бы 2 модуля с формами и один с главной программой.

5. удачи. спрашивай что непонятно.

6. здесь: http://forum.vingrad.ru/index.php?showtopic=54105 полно литературы по python, возможно что-то и по твоей проблеме.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)