如何在多选项卡GUI tkinter(笔记本小部件)上为每个单个选项卡创建事件实例 [英] how to make instances of event for every single tab on multi tab GUI tkinter( notebook widget)
问题描述
这是我的代码..我需要事件绑定在同一时间为所有选项卡工作。问题是当生成新的选项卡事件绑定将与上一个生成的选项卡相关,而不再工作的pre -generated tabs..please help - (python 2.7)
this is my code.. and i need the event binding to work for all tabs the same time..the problem is when generate new tab the event binding will be related to the last generated tab and not working any more for pre-generated tabs..please help--(python 2.7)
#!/usr/bin/env python
import Tkinter
from Tkinter import *
import tkMessageBox
import ttk
root = Tkinter.Tk()
root.minsize(300,300)
root.geometry("1000x700")
body=ttk.Notebook(root,width=1000,height=650,)
tabs={'ky':1}
def generate_tabs(tab,name):
tab=Tkinter.Frame(body)
entry=Entry(tab).pack(side=TOP)
def alert(event):
tkMessageBox.showinfo('alert1','FocusOut event is working for '+name)
def printing(event):
print event.keysym+' for '+name
root.bind("<Key>",printing)
tab.bind_class('Entry',"<FocusOut>",alert)
body.add(tab,text=name)
def start_generating():
if tabs['ky']==4:pass
elif tabs['ky']==3: generate_tabs('tab4','tab4') ; tabs['ky']=4
elif tabs['ky']==2: generate_tabs('tab3','tab3') ; tabs['ky']=3
elif tabs['ky']==1: generate_tabs('tab2','tab2') ; tabs['ky']=2
else:pass
generate_tabs('tab1','tab1')
button=Button(root,text='generate',command=start_generating).pack(side=LEFT)
body.pack(side=TOP)
root.mainloop()
推荐答案
我使用MyTab类来创建具有自己的功能警报的新标签(当您专注于输入时调用)和打印(在输入条目时调用)。
I use class MyTab to create new tab with own function alert (called when you focus out entry) and printing (called when you type in entry).
我使用打印
代替 tkMessageBox
,因为messagebox在新选择的标签上重点输入条目(当您更改选项卡时),所以您不会看到上一个选项卡的消息框,而是从当前选项卡。
I use print
in place of tkMessageBox
because messagebox focuse out entry on new selected tab (when you change tab) so you don't see messagebox from previous tab, but from current tab.
#!/usr/bin/env python
from Tkinter import *
import tkMessageBox
import ttk
#---------------------------------------------------------------------
class MyTab(Frame):
def __init__(self, root, name):
Frame.__init__(self, root)
self.root = root
self.name = name
self.entry = Entry(self)
self.entry.pack(side=TOP)
self.entry.bind('<FocusOut>', self.alert)
self.entry.bind('<Key>', self.printing)
#-------------------------------
def alert(self, event):
print 'FocusOut event is working for ' + self.name + ' value: ' + self.entry.get()
#tkMessageBox.showinfo('alert', 'FocusOut event is working for ' + self.name + ' value: ' + self.entry.get())
#-------------------------------
def printing(self, event):
print event.keysym + ' for ' + self.name
#---------------------------------------------------------------------
class Application():
def __init__(self):
self.tabs = {'ky':1}
self.root = Tk()
self.root.minsize(300, 300)
self.root.geometry("1000x700")
self.notebook = ttk.Notebook(self.root, width=1000, height=650)
# self.all_tabs = []
self.addTab('tab1')
self.button = Button(self.root, text='generate', command=self.start_generating).pack(side=BOTTOM)
self.notebook.pack(side=TOP)
#-------------------------------
def addTab(self, name):
tab = MyTab(self.notebook, name)
self.notebook.add(tab, text=name)
# self.all_tabs.append(tab)
#-------------------------------
def start_generating(self):
if self.tabs['ky'] < 4:
self.tabs['ky'] += 1
self.addTab('tab'+ str(self.tabs['ky']))
#-------------------------------
def run(self):
self.root.mainloop()
#----------------------------------------------------------------------
Application().run()
这篇关于如何在多选项卡GUI tkinter(笔记本小部件)上为每个单个选项卡创建事件实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!