python – 将函数从Tkinter框架调用到另一个框架
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将函数从Tkinter框架调用到另一个框架,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2905字,纯文字阅读大概需要5分钟。
内容图文
![python – 将函数从Tkinter框架调用到另一个框架](/upload/InfoBanner/zyjiaocheng/711/84e175ab8aae4576ae121c35ade2cbde.jpg)
我有一个页面,我将向客户展示一些细节.所以我创建了一个名为“客户详细信息”的页面,其中包含我需要的所有标签,并将这些标签的文本设置为变量.太糟糕了它不起作用.标签是在__init__方法中创建的,所以我不能“更新”它们,因为init只在开始时被调用.所以我想的是创建一个包含所有标签的新功能,当我有必要时我会调用该功能……这就是问题所在.我无法在其他tk.Frame中调用函数.以下代码是代码的简化版本.
import tkinter as tk
from tkinter import ttk
class Myapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = ttk.Frame(self, borderwidth=10, relief="sunken", width=200, height=100)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (HomePage, PageOne):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="N,S,E,W")
self.show_frame(HomePage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class HomePage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text="HomePage")
label.pack()
button1 = ttk.Button(self, text="Quit",
command=lambda: quit())
button1.pack()
button2 = ttk.Button(self, text="Call Function in the other page/class to show the label",
command=lambda: PageOne.function()) # this is to do it from an other class. I can't do this
button2.pack()
button3 = ttk.Button(self, text="Page One",
command=lambda: controller.show_frame(PageOne))
button3.pack()
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = ttk.Label(self, text="PageOne")
label.pack()
button1 = ttk.Button(self, text="Quit",
command=lambda: quit())
button1.pack()
button2 = ttk.Button(self, text="Call Function, in local it works..",
command=lambda: self.function())#this is to do it in local
button2.pack()
button3 = ttk.Button(self, text="HomePage",
command=lambda: controller.show_frame(HomePage))
button3.pack()
def function(self):
label1 = ttk.Label(self, text="It Worked!")
label1.pack()
app = Myapp()
app.mainloop()
解决方法:
要在另一个对象上调用方法,您需要对该对象的引用.您为管理不同页面而复制的代码旨在简化这一过程,但缺少获取页面实例的功能.
所以,首先想到你需要做的是在控制器上添加一个get_page方法:
class Myapp(tk.Tk):
...
def get_page(self, page_class):
return self.frames[page_class]
有了它,您可以获取页面实例,并且可以使用页面实例调用该方法.
接下来,您需要保留对控制器的引用,以便您可以从其他函数调用它:
class PageOne(tk.Frame):
def __init__(self, parent, controller):
self.controller = controller
...
最后,您现在可以使用控制器来获取页面,并使用页面调用该功能.
我的建议是不要使用lambda,除非你绝对需要它,在这种情况下你不需要.当您使用适当的函数而不是lambda时,编写和调试代码要容易得多.
例如:
class PageOne(tk.Frame):
def __init__(self, parent, controller):
...
button2 = ttk.Button(..., command=self.do_button)
...
def do_button(self):
page = self.controller.get_page(PageOne)
page.function()
内容总结
以上是互联网集市为您收集整理的python – 将函数从Tkinter框架调用到另一个框架全部内容,希望文章能够帮你解决python – 将函数从Tkinter框架调用到另一个框架所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。