Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2015 05:47:00

theLomov
Зарегистрирован: 2015-04-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter title в второстепенном окне

Здравствуйте! У меня небольшой вопрос, для знающих людей думаю фонарный
Есть код:

#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 было написано ‘операции с фамилиями’ ? Заранее спасибо!

Отредактировано theLomov (Апрель 5, 2015 05:47:59)

Офлайн

#2 Апрель 5, 2015 12:15:26

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Tkinter title в второстепенном окне

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()

Отредактировано alex925 (Апрель 5, 2015 12:15:40)

Офлайн

#3 Апрель 5, 2015 14:43:50

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Tkinter title в второстепенном окне

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()

Отредактировано 4kpt_III (Апрель 5, 2015 14:49:57)

Офлайн

#4 Апрель 5, 2015 14:53:01

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Tkinter title в второстепенном окне

4kpt_III
Зачем тогда event? В том-то и соль, что в event множество информации хранится
Да, знаю, просто на скорую руку так накидал, да и сейчас с pyqt в основном работаю.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version