Форум сайта python.su
Реализовал класс для вывода создания окна с 1-5 чекбоксами (в зависимости от длины списка-входного параметра ):
# -*- coding: cp1251 -*-
from Tkinter import *
from sys import *
class TK:
def __init__(self):
self.root = Tk()
self.flags =
self.flag1 = IntVar()
self.flag2 = IntVar()
self.flag3 = IntVar()
self.flag4 = IntVar()
self.flag5 = IntVar()
self.flags.append(self.flag1)
self.flags.append(self.flag2)
self.flags.append(self.flag3)
self.flags.append(self.flag4)
self.flags.append(self.flag5)
self.arr =
self.checkbutton1 = Checkbutton(self.root,variable = self.flag1)
self.checkbutton2 = Checkbutton(self.root,variable = self.flag2)
self.checkbutton3 = Checkbutton(self.root,variable = self.flag3)
self.checkbutton4 = Checkbutton(self.root,variable = self.flag4)
self.checkbutton5 = Checkbutton(self.root,variable = self.flag5)
self.arr.append(self.checkbutton1)
self.arr.append(self.checkbutton2)
self.arr.append(self.checkbutton3)
self.arr.append(self.checkbutton4)
self.arr.append(self.checkbutton5)
def SER(self,res,err):
for i in range(0,len(res)):
self.arr = res
self.arr.select()
self.arr.pack()
self.button = Button(self.root)
self.button= 10
self.button= “OK”
self.button.bind(self.check(self,res,err))
self.button.pack()
self.root.title(u'Ожидаемые результаты')
def check(self,event, res,err):
for i in range(0,len(res)):
if self.flags.get() == 1:
print err
res =
res.append(“qwe1qwe1qwe1qwe1”)
res.append('qwe2qwe2qwe2qwe2')
res.append('qwe3qwe3qwe3qwe3')
res.append('qwe4qwe4qwe4qwe4')
res.append('qwe5qwe5qwe5qwe5')
err =
err.append('QWE1')
err.append('QWE2')
err.append('QWE3')
err.append('QWE4')
err.append('QWE5')
n = TK()
n.SER(res,err)
n.root.mainloop()
проблема в том, что функция check() отрабатывает раньше, чем создается само окно. кто-нибудь может объяснить такое поведение?
Отредактировано (Ноя. 19, 2008 14:26:01)
Офлайн
Ну да… для создания окна требуется время. в то время, пока окно создается, у тебя спокойно вызывается твоя функция
А вот это что такое???
self.button.bind(self.check(self,res,err))
Отредактировано (Ноя. 19, 2008 15:13:52)
Офлайн
На сколько я помню, что бы не вызывалось сразу, можно оформить вызов через лямбду.
Офлайн
FerromanИ это верно.. да и event нужно указать обязательно
На сколько я помню, что бы не вызывалось сразу, можно оформить вызов через лямбду.
Офлайн
igor.kaistмне не понятно, почему она вообще вызывается..
Ну да… для создания окна требуется время. в то время, пока окно создается, у тебя спокойно вызывается твоя функция
igor.kaistсобытие <Button>
к какому событию ты привязываешь функцию??
Офлайн
Ferromanспасибо, сделал так: self.button.bind(“<Button>”, lambda :self.check(self,res,err))
На сколько я помню, что бы не вызывалось сразу, можно оформить вызов через лямбду.
Офлайн
ну тут уж нужно почитать немного доки, про то, что такое lambda.
1. когда ты в классе вызываешь функцию, self указывать не надо
2. lambda функции как и обычной функции нужно передовать параметры
lambda res,err:self.check(res,err)
Офлайн
igor.kaistна такой вызов он ругается “TypeError: <lambda>() takes 2 arguments (1 given)”
lambda функции как и обычной функции нужно передовать параметры
lambda res,err:self.check(res,err)
Офлайн
Привет. Вот так работает:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from Tkinter import *
from sys import *
class TK:
def __init__(self):
self.root = Tk()
self.flags = []
self.flag1 = IntVar()
self.flag2 = IntVar()
self.flag3 = IntVar()
self.flag4 = IntVar()
self.flag5 = IntVar()
self.flags.append(self.flag1)
self.flags.append(self.flag2)
self.flags.append(self.flag3)
self.flags.append(self.flag4)
self.flags.append(self.flag5)
self.arr = []
self.checkbutton1 = Checkbutton(self.root,variable = self.flag1)
self.checkbutton2 = Checkbutton(self.root,variable = self.flag2)
self.checkbutton3 = Checkbutton(self.root,variable = self.flag3)
self.checkbutton4 = Checkbutton(self.root,variable = self.flag4)
self.checkbutton5 = Checkbutton(self.root,variable = self.flag5)
self.arr.append(self.checkbutton1)
self.arr.append(self.checkbutton2)
self.arr.append(self.checkbutton3)
self.arr.append(self.checkbutton4)
self.arr.append(self.checkbutton5)
def SER(self,res,err):
for i in range(0,len(res)):
self.arr[i]["text"] = res[i]
self.arr[i].select()
self.arr[i].pack()
self.button = Button(self.root)
self.button["width"]= 10
self.button["text"]= "OK"
self.button.bind("<Button>",self.check) ############# ТУТЬ ##################
self.button.pack()
self.root.title(u'Ожидаемые результаты')
def check(self,event): ############ И ТУТЬ #################
for i in range(0,len(res)):
if self.flags[i].get() == 1:
print err[i]
res = []
res.append("qwe1qwe1qwe1qwe1")
res.append('qwe2qwe2qwe2qwe2')
res.append('qwe3qwe3qwe3qwe3')
res.append('qwe4qwe4qwe4qwe4')
res.append('qwe5qwe5qwe5qwe5')
err = []
err.append('QWE1')
err.append('QWE2')
err.append('QWE3')
err.append('QWE4')
err.append('QWE5')
n = TK()
n.SER(res,err)
n.root.mainloop()
Офлайн
спасибо, братан!
Офлайн