【问题标题】:Trapping Frame Entrance in tkinter在 tkinter 中捕获帧入口
【发布时间】:2017-05-12 00:42:28
【问题描述】:

我想绑定到框架的入口/出口。这很容易,但似乎当我将鼠标悬停在框架中的某个小部件上时,它被困为框架的出口(我想是因为框架在小部件区域中不“可见”。你可以看到这个通过运行以下代码来实现效果,该代码旨在显示一个文本字段(标签),然后在输入框架时更改为可编辑字段。一旦按钮位于文本区域本身,它就会返回标签。我想办法解决这个问题。(我需要捕获框架的入口,而不仅仅是文本区域。这只是一个玩具示例)

from tkinter import *
class MainWindow(Frame):
    def __init__(self,master):
        super().__init__(master)
        self.master = master
        #self.master.state('zoomed')
        self.pack()
        self.edit = 0
        self.initUI()

    def initUI(self):
        self.c = Canvas(self, height = 100, width = 400, bg = "red")
        self.c.pack()
        self.bind('<Enter>', lambda *args: textarea.display(1))
        self.bind('<Leave>', lambda *args: textarea.display(0))
        self.textstring = StringVar()
        self.textstring.set("Hello")
        textarea = TextArea(self.c,self.edit,self.textstring)
        textarea.display(2)
        self.c.create_window(10,10,window = textarea,anchor = NW)

class TextArea(Frame):
    def __init__(self,master,active,textstr):
        super().__init__()
        self.master = master
        self.active = active
        self.textstr = textstr
        self.inflag = False

    def display(self,e):
        if e == 0:
            for child in self.winfo_children():
                child.destroy()
            L = Label(self,text = self.textstr.get(),relief = "flat")
            L.pack()
        elif e ==1:
            for child in self.winfo_children():
                child.destroy()
            E = Entry(self,textvariable = self.textstr,width = 10)
            E.pack()
        elif e == 2:
            L = Label(self, text=self.textstr.get(), relief="flat")
            L.pack()

root = Tk()
mainframe = MainWindow(root)
mainframe.pack()
root.mainloop()   

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    这里的实际问题相当微妙:在TextArea__init__ 中,您未能将master 参数传递给超类,因此它默认为根窗口的子窗口。换句话说,TextArea 实际上是 MainWindow 的兄弟,而不是您想要的后代。因此,有必要从一个&lt;Leave&gt; 到另一个&lt;Enter&gt;。解决方案是执行super().__init__(master),就像您在MainWindow 中所做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多