如何更新 tkinter 子框架类中的标签文本

马克西姆斯

我在通过按钮命令通过类函数调用更新标签文本时遇到问题。我已将我的根框架分成五个子框架。一旦按钮命令函数被调用并要求用户输入文件。用户输入文件路径显示在根框架中,而不是调用函数的子框架中。在此处输入图片说明

import tkinter as tk
from tkinter import *
from tkinter import filedialog as fd
from tkinter import ttk

LARGE_FONT = ('Verdana', 10)

def donothing():
    print('Do Nothing')


class rootframe(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, "ABC")

        container = tk.Frame(self)
        container.pack(side='top', fill='both', expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        frame = StartPage(container, self)
        self.frames[StartPage] = frame
        frame.grid(row=0, column=0, sticky='nsew')
        self.show_frame(StartPage)

        for F in (StartPage, graph, piano):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky='nsew')

        self.show_frame(StartPage)


    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()


class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        sidebar = Frame(self, bg='whitesmoke', width=250, height=780,
                        borderwidth=2, relief='ridge')
        statusbar = Frame(self, bg='whitesmoke', width=1280, height=30,
                          borderwidth=2, relief="ridge")
        toolbar = Frame(self, bg='whitesmoke', width=1280, height=30,
                        borderwidth=2, relief='ridge')
        helpbar = Frame(self, bg='whitesmoke', width=1280, height=150,
                        borderwidth=2, relief='ridge')
        mainframe = Frame(self, bg='whitesmoke', width=1280, height=550,
                          borderwidth=2, relief="sunken")
        sidebar.pack(side='left', anchor='sw')
        statusbar.pack(side='bottom', anchor='center')
        toolbar.pack(fill=X, side='top', anchor='center')
        helpbar.pack(side='bottom', anchor='center')
        mainframe.pack(side='top', anchor='center')

        label = tk.Label(toolbar, text='Start Page', font=LARGE_FONT)
        label.pack(side='left', anchor='sw', expand=True)

        button2 = ttk.Button(toolbar, text='File Merge Tool',
                             command=lambda: controller.show_frame(piano))
        button2.pack(side='left', expand=True)
        button3 = ttk.Button(toolbar, text='Graph Page',
                             command=lambda: controller.show_frame(graph))
        button3.pack(side='left', expand=True)


class piano(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = parent
        filename = " "
        sidebar = Frame(self, bg='whitesmoke', width=250, height=780, borderwidth=2,
                    relief='ridge')
        statusbar = Frame(self, bg='whitesmoke', width=1280, height=30,
                      borderwidth=2, relief="ridge")
        toolbar = Frame(self, bg='whitesmoke', width=1280, height=30, borderwidth=2,
                    relief='ridge')
        helpbar = Frame(self, bg='whitesmoke', width=1280, height=150,
                    borderwidth=2, relief='ridge')
        mainframe = Frame(self, bg='whitesmoke', width=1280, height=550,
                      borderwidth=2, relief="sunken")

        sidebar.pack(side='left', anchor='sw')
        statusbar.pack(side='bottom', anchor='center')
        toolbar.pack(fill=X, side='top', anchor='center')
        helpbar.pack(side='bottom', anchor='center')
        mainframe.pack(side='top', anchor='center')

        button2 = ttk.Button(toolbar, text='HOME',
                         command=lambda: controller.show_frame(StartPage))
        button2.pack(side='right', anchor='nw', expand=True)

        label = tk.Label(mainframe, text='File Merge', font=36)
        label.place(x=510, y=10)

        label1 = tk.Label(mainframe, text='file1', font=LARGE_FONT)
        label1.place(x=0, y=60)
        inp1 = ttk.Button(mainframe, text='Browse',
                      command=lambda: piano.readfile())
        inp1.place(x=800, y=60)
        pathlabel = Label(mainframe, background='white', width=80, relief='sunken',
                      borderwidth=4)
        pathlabel.place(x=220, y=60)
        pathlabel.config(text=filename)

        label2 = tk.Label(mainframe, text='file2', font=LARGE_FONT)
        label2.place(x=0, y=80)
        inp2 = ttk.Button(mainframe, text='Browse',
                      command=lambda: piano.readfile())
        inp2.place(x=800, y=80)
        pathlabel1 = Label(mainframe, background='white', width=80, relief='sunken',
                       borderwidth=4)
        pathlabel1.place(x=220, y=80)
        pathlabel1.config(text=filename)

    def readfile():
        filename = fd.askopenfilenames(filetypes=[("TXT Files", "*.txt")])
        pathlabel = Label(background='white', width=80, relief='sunken',
                          borderwidth=4)
        pathlabel.place(x=220, y=60)
        pathlabel.config(text=filename)


class graph(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = ttk.Label(self, text='Graph', font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        button1 = ttk.Button(self, text='Back to Home',
                             command=lambda: controller.show_frame(StartPage))
        button1.pack()


app = rootframe()
app.mainloop()
亨利·伊克

更改pathlabelself.pathlabel,并让您的函数readfile更新文本pathlabel而不是每次都创建一个新的小部件。

class piano(tk.Frame):

    def __init__(self,parent,controller):
        tk.Frame.__init__(self,parent)
        self.controller = parent
        filename=" "
        sidebar =  Frame(self, bg='whitesmoke',width=250, height=780,borderwidth=2,relief='ridge')
        statusbar = Frame(self, bg='whitesmoke',width=1280, height=30,borderwidth=2, relief="ridge")
        toolbar = Frame(self, bg='whitesmoke', width=1280, height=30,borderwidth=2,relief='ridge')
        helpbar = Frame(self, bg='whitesmoke', width=1280, height=150,borderwidth=2,relief='ridge')
        mainframe = Frame(self, bg='whitesmoke', width=1280, height=550,borderwidth=2,relief="sunken")

        sidebar.pack(side='left',anchor='sw')
        statusbar.pack(side='bottom',anchor='center')
        toolbar.pack(fill=X,side='top',anchor='center')
        helpbar.pack(side='bottom',anchor='center')
        mainframe.pack(side='top',anchor='center')

        button2=ttk.Button(toolbar,text='HOME',command=lambda:controller.show_frame(StartPage))
        button2.pack(side='right',anchor='nw',expand=True)

        label=tk.Label(mainframe,text='File Merge',font=36)
        label.place(x=510,y=10)


        label1=tk.Label(mainframe,text='file1',font=LARGE_FONT)
        label1.place(x=0,y=60)
        inp1=ttk.Button(mainframe,text='Browse',command=lambda: self.readfile(self.pathlabel))
        inp1.place(x=800,y=60)
        self.pathlabel = Label(mainframe,background='white',width=80,relief='sunken',borderwidth=4)
        self.pathlabel.place(x=220,y=60)
        self.pathlabel.config(text=filename)

        label2=tk.Label(mainframe,text='file2',font=LARGE_FONT)
        label2.place(x=0,y=80)
        inp2=ttk.Button(mainframe,text='Browse',command=lambda: self.readfile(self.pathlabel1))
        inp2.place(x=800,y=80)
        self.pathlabel1 = Label(mainframe,background='white',width=80,relief='sunken',borderwidth=4)
        self.pathlabel1.place(x=220,y=80)
        self.pathlabel1.config(text=filename)

    def readfile(self,path_entry):
        filename = fd.askopenfilenames(filetypes=[("TXT Files", "*.txt")])
        path_entry.config(text=filename)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更新tkinter标签

来自分类Dev

如何更新Tkinter标签?

来自分类Dev

更新页面类python中的tkinter标签文本

来自分类Dev

如何实时更新tkinter标签文本

来自分类Dev

如何在Tkinter中更新文本标签?

来自分类Dev

如何在Tkinter中更新标签

来自分类Dev

在Python TkInter中更新标签文本

来自分类Dev

更新tkinter中的标签

来自分类Dev

如何使tkinter框架循环并更新对象值?

来自分类Dev

从文本文件读取时如何更新Tkinter标签

来自分类Dev

如何进行Tkinter标签更新?

来自分类Dev

Python tkinter:不断更新框架中的标签

来自分类Dev

tkinter:由于TKinter中的单独过程,如何正确更新GUI?

来自分类Dev

Tkinter。StringVar()。如何在代码中更新标签。

来自分类Dev

Tkinter标签未更新

来自分类Dev

更新Tkinter标签

来自分类Dev

Tkinter标签不会更新

来自分类Dev

更新tkinter标签

来自分类Dev

在Tkinter中按下按钮后更新标签文本

来自分类Dev

如何在tkinter中更新“实时”文本框?

来自分类Dev

如何在Tkinter中更新为列表创建的按钮的文本

来自分类Dev

更新输入的文本(Tkinter)

来自分类Dev

Tkinter 标签文本不会更新/覆盖

来自分类Dev

如何在 Tkinter/TTK 中稍微移动标签中的文本?

来自分类Dev

如何将变量从 Tkinter 类外部传递到 Tkinter 类中的标签?

来自分类Dev

如何在Tkinter中访问标签以更改其文本

来自分类Dev

如何在Tkinter中居中放置文本标签?

来自分类Dev

如何在Tkinter画布上更新matplotlib子图?

来自分类Dev

如何使Tkinter画布更新?