Найти - Пользователи
Полная версия: Tkinter. Непонятен момент....
Начало » GUI » Tkinter. Непонятен момент....
1
WindeL
Пытаюсь пробовать делать GUI с помощью ООП. Объясните, пожалуйста, почему на дочерних окнах не выводятся лейблы.Ничего кроме фона нет. ООП плохо идет…

from Tkinter import *

class But():
def __init__(self):
self.but= Button(root)
self.but["text"] = "Event"
self.but.bind("<Button-1>",self.pr)
self.but.pack()
self.l= Button(root, text = '<')
self.l.bind('<Button-1>',self.fr)
self.l.pack()

def fr(self,event):
win = Toplevel(root,relief=RAISED,bd=10,bg="lightblue")
win.title("Very well")
win.minsize(wodth=400,hight=200)
self.k = Label(win,text="Yandex")
self.k.pack()

def pr(self,event):
wim = Toplevel(root,relief=SUNKEN,bd=10,bg="lightblue")
wim.title("Bad well")
wim.minsize(wodth=400,hight=200)
self.l = Label(wim,text="Google")
self.l.pack()

root = Tk()
obj = But()
root.mainloop()
Griffon
Во-первых, было бы полезно наследовать класс окна от фрэйма.
Во-вторых, какое это ООП, когда диалоги формируются внутри функции, в то время как можно было вынести их в отдельные классы, в частности, в один отдельный класс.
В-третьих, конструктор класса Button принимает параметр ‘function’. Зачем надо было делать бинд, абсолютно не понятно.
В-четвёртых, вы вероятно захотите чтобы в панели инструментов операционной системы не вылазило три кнопки на каждое окно. Для этого создаваемые окна надо определить как дочерние главному окну.

И наконец по сути: ни когда не видел в природе параметров wodth и hight.
WindeL
Спасибо за пояснения. Можете привести какой-нибудь простенький пример в этом духе или накидать скелет? Не понимаю, как можно все кнопки и разные элементы занести в один класс…
Griffon
Я извиняюсь, у кнопки параметр command.

Код можно писать как угодно в принципе.
Например:
from tkinter import *

class MainWindow(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.top = parent if parent else self.winfo_toplevel()
self.but= Button(root, text='Event', command=self.pr)
self.but.pack()
self.l= Button(root, text = '<', command=self.fr)
self.l.pack()

def fr(self):
win = Pretty_dialog(self,relief=RAISED,bd=10,bg='lightblue',
command=self.recive, title='Very well', text='Yandex')

def pr(self):
win = Pretty_dialog(self,relief=SUNKEN,bd=10,bg='lightblue',
command=self.recive, title='Bad well', text='Google')

def recive(self, text):
self.top.title(text)



class Pretty_dialog(Toplevel):
def __init__(self, parent, command=None, title='Child', text='text', **kw):
Toplevel.__init__(self, parent, **kw)
self.command = command
self.transient(parent)
self.title(title)
self.minsize(width=400, height=200)
self.lable = Label(self, text=text)
self.lable.pack()
self.entry_val = StringVar()
Entry(self, textvariable=self.entry_val).pack()
Button(self, text='Send', command=self.send).pack()

def send(self):
if(self.command):
self.command(self.entry_val.get())
self.destroy()


root = Tk()
obj = MainWindow()
root.mainloop()
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