-1

这是我的代码..我需要事件绑定同时适用于所有选项卡..问题是当生成新选项卡时,事件绑定将与最后生成的选项卡相关,并且不再适用于预生成的选项卡..请帮助--(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()
4

1 回答 1

2

我使用 MyTab 类创建具有自己的功能警报(当您关注条目时调用)和打印(当您输入条目时调用)的新选项卡。

我使用print代替,tkMessageBox因为消息框将条目集中在新选择的选项卡上(当您更改选项卡时),因此您看不到来自前一个选项卡的消息框,而是来自当前选项卡。

#!/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()     
于 2013-11-10T22:29:24.817 回答