如何在多选项卡GUI tkinter(笔记本小部件)上为每个单个选项卡创建事件实例 [英] how to make instances of event for every single tab on multi tab GUI tkinter( notebook widget)

查看:301
本文介绍了如何在多选项卡GUI tkinter(笔记本小部件)上为每个单个选项卡创建事件实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码..我需要事件绑定在同一时间为所有选项卡工作。问题是当生成新的选项卡事件绑定将与上一个生成的选项卡相关,而不再工作的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆