Wirror 发表于 2021-7-20 07:00:54

tkinter bind方法

本帖最后由 Wirror 于 2021-7-20 07:08 编辑

# 这段代码绑定Enter键触发的事件为ok,为什么窗口打开后还没按下回车ok就被调用了(代码从front_sell进入的,没有其他问题),
而且为什么在ok函数中没法get文本框的字符呢?
另:写在类中的方法中参数event和master是干什么用的,一直没有弄明白

from tkinter import *
class Application_ui(Frame):
    def __init__(self, master=None):
      Frame.__init__(self, master)
      self.master.title('Form1')
      self.master.geometry('1424x862')
      self.createWidgets()


    def createWidgets(self):
      self.top = self.winfo_toplevel()

      self.style = Style()
      front_sell_window.bind('<KeyPress-Return>', self.ok())

class Application(Application_ui):
    #这个类实现具体的事件处理回调函数。界面生成代码在Application_ui中。
    def __init__(self, master=None):
      Application_ui.__init__(self, master)

    def ok(self):# todo 按下回车后的操作:
        aaa = 'aaa'
      print(aaa)
def front_sell(t):
    global front_sell_window
    front_sell_window = Tk()
    global top
    top = t
    front_sell_window.protocol('WM_DELETE_WINDOW', me_quit)
    Application(front_sell_window).mainloop()
      

鱼cpython学习者 发表于 2021-7-22 13:48:29

1. 代码第15行
front_sell_window.bind('<KeyPress-Return>', self.ok())
bind函数要求传入的是一个函数的引用,注意,是函数的引用
其实就是传入一个函数名

而你写了self.ok(),导致代码运行到这里就自动调用self.ok这个函数,所以出错。
2.由于你的错误,gui窗口在初始化之前就调用了self.ok函数,文本框都还没准备好呢,怎么get内容呢

3.参数event:bind方法在监视到event事件后,会调用传入的函数(就是self.ok)
而且会自动传入event对象,这个对象包含了发出事件的对象,发出事件的坐标等待
而master参数,我觉得应该是父组件(就是上一层的组件,比如Tk类的对象)

鱼cpython学习者 发表于 2021-7-22 13:49:42

忘了说第一个问题的解决方法,把self.ok()的括号去掉即可
页: [1]
查看完整版本: tkinter bind方法