Найти - Пользователи
Полная версия: Tkinter title в второстепенном окне
Начало » GUI » Tkinter title в второстепенном окне
1
theLomov
Здравствуйте! У меня небольшой вопрос, для знающих людей думаю фонарный
Есть код:
#coding: utf-8
from Tkinter import *
import ttk
def button_clicked():
    root2 = Tk()
    root2.title('n')
    root2.mainloop()
    
root = Tk()
root.title('Список данных')
root.geometry('400x400')
surname = ttk.Button(root, text=u"Фамилия", command=button_clicked)
name = ttk.Button(root, text=u"Имя", command=button_clicked)
patronymic = ttk.Button(root, text=u"Отчество", command=button_clicked)
surname.pack()
name.pack()
patronymic.pack()
root.mainloop()

как видно запускается программа с тремя кнопками, нажимаешь на кнопку появляется еще окошко, как сделать так что бы в title второго окна подставлялось значение в зависимости от того на какую кнопку нажали. Допустим в первом окне нажали на ‘Фамилия’, открылось второе окно и в title было написано ‘операции с фамилиями’ ? Заранее спасибо!
alex925
import Tkinter
import ttk
 
 
def button_clicked(event, title):
    root2 = tkinter.Toplevel()
    root2.title(title)
    root2.mainloop()
 
root = tkinter.Tk()
root.title('Список данных')
root.geometry('400x400')
 
surname = ttk.Button(root, text=u'Фамилия')
surname.bind('<ButtonRelease-1>', lambda event: button_clicked(event,
                                                               'Фамилия'))
surname.pack()
 
name = ttk.Button(root, text=u'Имя')
name.bind('<ButtonRelease-1>', lambda event: button_clicked(event, 'Имя'))
name.pack()
 
patronymic = ttk.Button(root, text=u'Отчество')
patronymic.bind('<ButtonRelease-1>', lambda event: button_clicked(event,
                                                                  'Отчество'))
patronymic.pack()
 
root.mainloop()
4kpt_III
alex925 Неа. Проще. Зачем тогда event? В том-то и соль, что в event множество информации хранится. Создавать каждую кнопку отдельно Вам должно быть лень - Вы же настоящий программист. Ну и 2 mainloop() не нужен. Точнее это не та ситуация, где он нужен. Правда если вместо bind использовать command - вот тогда нужна lambda (вариант 2)

C bind

import Tkinter
import ttk
# 
def button_clicked(event):
    name = event.widget["text"]
    root2 = tkinter.Toplevel()
    root2.title(name)
# 
root = Tkinter.Tk()
root.title('Список данных')
root.geometry('400x400')
#
for name in [u'Фамилия', u'Имя', u'Отчество']:
    but = ttk.Button(root, text=name)
    but.bind('<ButtonRelease-1>', button_clicked)
    but.pack()
#
root.mainloop()

С command

import Tkinter
import ttk
# 
def button_clicked(event, name):
    root2 = tkinter.Toplevel()
    root2.title(name)
# 
root = Tkinter.Tk()
root.title('Список данных')
root.geometry('400x400')
#
for name in [u'Фамилия', u'Имя', u'Отчество']:
    ttk.Button(
        root, text=name,
        command=lambda name=name: button_clicked(name)
    ).pack()
#
root.mainloop()
alex925
4kpt_III
Зачем тогда event? В том-то и соль, что в event множество информации хранится
Да, знаю, просто на скорую руку так накидал, да и сейчас с pyqt в основном работаю.
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