Python Tkinter-在类中使用按钮命令从另一个类调用函数
我的程序使用第一个类中的按钮来触发第二个类中的函数。但是,当按下按钮时,它要求我包含一个自参数,因此我如何使用静态方法suggered form here()或使用其他替代方法来调用另一个函数 如果你能建议我如何在第二堂课上使用StringVar,我会觉得更容易 我认为代码中唯一应该修改的部分:Python Tkinter-在类中使用按钮命令从另一个类调用函数,python,function,class,tkinter,Python,Function,Class,Tkinter,我的程序使用第一个类中的按钮来触发第二个类中的函数。但是,当按下按钮时,它要求我包含一个自参数,因此我如何使用静态方法suggered form here()或使用其他替代方法来调用另一个函数 如果你能建议我如何在第二堂课上使用StringVar,我会觉得更容易 我认为代码中唯一应该修改的部分: self.traceButton=Button(self.main_inner_frame,text="Trace",command=Second.printSecondLine()) 第二类代码:
self.traceButton=Button(self.main_inner_frame,text="Trace",command=Second.printSecondLine())
第二类代码:
class Second(First):
# @staticmethod
def __init__(self,master):
super().__init__(master)
def printSecondLine(self):
content = self.traceEntry.get()
print(content)
如果您需要完整的代码:
from tkinter import *
class First(Frame):
def __init__(self,master):
super().__init__()
master.minsize(width=755, height=520)
master.maxsize(width=755, height=520)
Grid.config(self)
# Run all function in [First Class]
self.widget_size()
#self.getTEXT()
def widget_size(self):
# Define a small frame for it
self.main_inner_frame = LabelFrame(self,text="Tracing Method",height= 120,width =355)
self.main_inner_frame.grid(row= 0, column=0)
self.main_inner_frame.grid_propagate(0)
# Create a button for it [When trace click it will show the text in the entry on terminal]
self.traceButton = Button(self.main_inner_frame, text="Trace",command=Second.printSecondLine())
self.traceButton.grid(row = 0, column = 1, sticky = W)
# Create a entry box for the user
# use a string variable tvar
tvar = StringVar()
self.traceEntry = Entry(self.main_inner_frame,textvariable=tvar,width=30)
self.traceEntry.grid(row = 0, column = 2, sticky = W)
# def getTEXT(self):
# content = self.traceEntry.get()
# print(content)
class Second(First):
# @staticmethod
def __init__(self,master):
super().__init__(master)
def printSecondLine(self):
content = self.traceEntry.get()
print(content)
return content
if __name__ == '__main__':
root = Tk()
root.title("Good System")
TIF = First(root)
root.mainloop()
预期结果
当用户按下按钮时,条目将获得文本并显示在终端中
创建按钮时,不能将command=设置为与parantesses“()”一起工作,除非使用类似的lambda
但这也应该起作用:
self.traceButton = Button(self.main_inner_frame, text="Trace",command=Second.printSecondLine)
已解决。我做了几件事来让您的代码按照您想要的规范工作:
from tkinter import *
class First(Frame):
def __init__(self,master):
super().__init__()
master.minsize(width=755, height=520)
master.maxsize(width=755, height=520)
Grid.config(self)
# Run all function in [First Class]
self.widget_size()
def widget_size(self):
# Define a small frame for it
self.main_inner_frame = LabelFrame(self,text="Tracing Method",height= 120,width =355)
self.main_inner_frame.grid(row= 0, column=0)
self.main_inner_frame.grid_propagate(0)
# Create a entry box for the user
# use a string variable tvar
tvar = StringVar()
self.traceEntry = Entry(self.main_inner_frame,textvariable=tvar,width=30)
self.traceEntry.grid(row = 0, column = 2, sticky = W)
# Create a button for it [When trace click it will show the text in the entry on terminal]
self.traceButton = Button(self.main_inner_frame, text="Trace",command=lambda: Second.printSecondLine(tvar))
self.traceButton.grid(row = 0, column = 1, sticky = W)
class Second(First):
@staticmethod
def __init__(self,master):
super().__init__(master)
@staticmethod
def printSecondLine(value):
print(value.get())
if __name__ == '__main__':
root = Tk()
root.title("Good System")
TIF = First(root)
root.mainloop()
Yap,使用command=Second.printSecondLine,它显示类型错误:缺少1个必需的位置参数:“self”将
printSecondLine()
移动到First
并删除无意义的Second
。然后,command=self.printSecondLine
对于此函数,确认是没有意义的。但是我有一个巨大的类,它将存储在另一个文件中,如果我解决这个最小化程序,我可以在我的大程序中做以下事情:在第二个类中,我将使用它来跟踪所有windows用户活动历史,因此,这部分我将只使用它从文件对话框目录中获取XXX文本,我已经知道如何做到这一点,只是需要从另一个班级得到,对我来说应该没有问题。如果是没有意义的,我不会创建这个来帮助我解决我的程序中更大的问题…希望你理解。如果我遵循你的建议,谢谢你,因为简单的程序是可以的。但是我的第一个程序已经是一个收集证据的主界面,所以我没有必要把一个复杂的代码放在一个已经有很多代码的文件中,我这样做只是为了干净的代码。你可以有一个Second
类,但在First
中有printSecondLine
(顺便说一句,给所有东西起个更好、有意义的名字)。不清楚为什么printSecondLine
应该在Second
中,如果它所做的一切都与First
相关。这是我的完整系统代码:wuahts3是我的主python。举个巨大的例子:windows证据的所有跟踪过程都将在另一个类中完成,其中有一个函数需要打开文件对话框directo当用户在主文件(wuahts3)中按下跟踪按钮时,将来会有一个按钮用于不同类的多个函数,所以如果我需要从第二类获得该功能以实现我的目标,您能帮助我吗?(基于我的小示例,我确信有一种方法是正确的?
from tkinter import *
class First(Frame):
def __init__(self,master):
super().__init__()
master.minsize(width=755, height=520)
master.maxsize(width=755, height=520)
Grid.config(self)
# Run all function in [First Class]
self.widget_size()
def widget_size(self):
# Define a small frame for it
self.main_inner_frame = LabelFrame(self,text="Tracing Method",height= 120,width =355)
self.main_inner_frame.grid(row= 0, column=0)
self.main_inner_frame.grid_propagate(0)
# Create a entry box for the user
# use a string variable tvar
tvar = StringVar()
self.traceEntry = Entry(self.main_inner_frame,textvariable=tvar,width=30)
self.traceEntry.grid(row = 0, column = 2, sticky = W)
# Create a button for it [When trace click it will show the text in the entry on terminal]
self.traceButton = Button(self.main_inner_frame, text="Trace",command=lambda: Second.printSecondLine(tvar))
self.traceButton.grid(row = 0, column = 1, sticky = W)
class Second(First):
@staticmethod
def __init__(self,master):
super().__init__(master)
@staticmethod
def printSecondLine(value):
print(value.get())
if __name__ == '__main__':
root = Tk()
root.title("Good System")
TIF = First(root)
root.mainloop()