问题描述:
在使用Tkinter进行页面设计时,用到Button函数,我们想要通过点击按钮产生一个事件,但是却遇到了还没点击按钮,但系统却执行了command链接的事件函数。
例如下方代码两种情况会出现还未按按钮却执行事件的情况:
情况1:command=self.createSecondPage1()
def createFirstPage(self):
self.page1 = Frame(self.root)
self.page1.pack()
self.button11 = Button(self.page1, width=18, height=2, text="Demo", bg='red', font=("宋", 12),
relief='raise', command=self.createSecondPage1())
def createSecondPage1(self):
self.camera = cv2.VideoCapture(0)
self.page1.pack_forget()
self.page2 = Frame(self.root)
self.page2.pack()
情况2:command=self.createSecondPage1(2)
def createFirstPage(self):
self.page1 = Frame(self.root)
self.page1.pack()
self.button11 = Button(self.page1, width=18, height=2, text="Demo", bg='red', font=("宋", 12),
relief='raise', command=self.createSecondPage1(2))
def createSecondPage1(page,self):
self.camera = cv2.VideoCapture(0)
self.page1.pack_forget()
self.page2 = Frame(self.root)
self.page2.pack()
解决方案:
情况1解决方案:去掉括号!
将command=self.createSecondPage1() 改为command=self.createSecondPage1
def createFirstPage(self):
self.page1 = Frame(self.root)
self.page1.pack()
self.button11 = Button(self.page1, width=18, height=2, text="Demo", bg='red', font=("宋", 12),
relief='raise', command=self.createSecondPage1)
def createSecondPage1(self):
self.camera = cv2.VideoCapture(0)
self.page1.pack_forget()
self.page2 = Frame(self.root)
self.page2.pack()
情况2解决方案:在self.createSecondPage1(2)前加上‘lambda:’
def createFirstPage(self):
self.page1 = Frame(self.root)
self.page1.pack()
self.button11 = Button(self.page1, width=18, height=2, text="Demo", bg='red', font=("宋", 12),
relief='raise', command=lambda:self.createSecondPage1(2))
def createSecondPage1(page,self):
self.camera = cv2.VideoCapture(0)
self.page1.pack_forget()
self.page2 = Frame(self.root)
self.page2.pack()