Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Хотел разделить форму с объектами и обработчики событий в разные файлы [RSS Feed]

#1 Ноя. 25, 2007 17:56:19

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Хотел разделить форму с объектами и обработчики событий в разные файлы

Что-то не получается. (вернее, создать форму-то получилось, но не получается передать данные из файла с обработчиками в файл с описанием формы)
Если кому не лень, гляньте - чего не так?
И, вдобавок, какими неприятностями может грозить подобный способ? (Кроме тех, что я уже получил. :)) Но это я по незнанию)

Файл с обработчиками событий

# -*- coding: cp1251 -*-
import wx, mainform

a=b=10
c=0

# —-Блок обработчиков кнопок—-
def printing(evt): # сдаётся мне, что тут передаётся вовсе не evt, а self
print ‘Сработало!’
def sum_and_printing(evt):
global c
c=a+b
print c
def print_c(evt):
global c
print c
mainform.mainform.mypanel.mytect.SetText(str©)
# карул-строка! А покороче нельзя?
# ой-ё, а как передать-то? Всё равно, не пашет, ведь!
def c_plus_ten(evt):
global c
c=c+10


# ——————————–
if __name__==('__main__'):
myapp=wx.App()
mainwindow=mainform.mainform(None, ‘Агушки’, size=(500,500))
mainwindow.Show()
myapp.MainLoop()


Файл с описанием формы-фрейма

# -*- coding: cp1251 -*-
import wx, main
class mainform(wx.Frame):
def __init__(self, parent, title, size):
wx.Frame.__init__(self, parent, -1, title=title, size=size)
self.mypanel=wx.Panel(self, -1)
# —-Блок кнопок—-
button1=wx.Button(self.mypanel, -1, ‘Сработает?’, (10,10))
self.Bind(wx.EVT_BUTTON, main.printing, button1)

button2=wx.Button(self.mypanel, -1, ‘Суммируем а и b’, (10,50))
self.Bind(wx.EVT_BUTTON, main.sum_and_printing, button2)

button3=wx.Button(self.mypanel, -1, ‘(дублирует действие второй кнопки)’, (10,100))
self.Bind(wx.EVT_BUTTON, main.sum_and_printing, button3)

button4=wx.Button(self.mypanel, -1, ‘Увеличить с на десятку’, (10,150))
self.Bind(wx.EVT_BUTTON, main.c_plus_ten, button4)

button5=wx.Button(self.mypanel, -1, ‘Вывести изменённую ’'с'' на экран', (10,200))
self.Bind(wx.EVT_BUTTON, main.print_c, button5)

# —-Блок текст-контролей—-
self.mytect=wx.TextCtrl(self.mypanel, -1, '', pos=(300,10), size=(100,20))
pass



Отредактировано (Ноя. 25, 2007 17:58:52)

Офлайн

#2 Ноя. 26, 2007 17:12:26

player
От:
Зарегистрирован: 2007-08-09
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Хотел разделить форму с объектами и обработчики событий в разные файлы

То что ты хотел сделать у меня получилось, но только с использование еще одно файла.
Может я где-то туплю, пускай знающие люди поправлят, но писать mainform.mainform.mypanel.mytect.SetText(str©) не то что неправильно, а НЕПРАВИЛЬНО ВООБЩЕ. Первый mainform это модуль, второй mainform.mainform это класс, а тебе нужно вызвать метод объекта. А объектов у тебя 2: myapp и mainwindow. Я честно говоря не разобрался доконца , почему не видно объект mainwindow при вызове print_c, но разбираться долго не хотелось, потому сделал чтобы работало. А для этого нужно сохранить mainwindow как-то, а потом заюзать.
Я это сделал вот так:
еще один файл: store.py

global var
var = None
def Set(variable):
global var
var = variable
def Get():
return var


Ну и сохранение и загрузка (в файле main.py)

def print_c(evt):
global c
print c
store.Get().mytect.SetValue(str©)


if __name__==('__main__'):
myapp=wx.App()
mainwindow=mainform.mainform(None, ‘Агушки’, size=(500,500))
mainwindow.Show()
store.Set(mainwindow)
myapp.MainLoop()



Офлайн

  • Начало
  • » GUI
  • » Хотел разделить форму с объектами и обработчики событий в разные файлы[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version