Python 如何从同级类配置tkinter wiget中的文本?

Python 如何从同级类配置tkinter wiget中的文本?,python,class,tkinter,Python,Class,Tkinter,因此,每当我切换到排行榜框架时,我想更新保存排行榜的文件Lista_Igraca.txt中前9行的列表。因为当我在游戏结束后将任何新信息添加到文件中,并且已经加载的输入少于10个时,新输入不想更新。所以我试着调用了两个函数leadboardPage.configure_leadboard和leadboardPage.leadboard_creation,这两个函数基本上只需要将前9个项目放在排行榜标签上。 但是,当我以Main Menu.button2\f函数下面显示的方式调用它们时,我会收到以

因此,每当我切换到排行榜框架时,我想更新保存排行榜的文件Lista_Igraca.txt中前9行的列表。因为当我在游戏结束后将任何新信息添加到文件中,并且已经加载的输入少于10个时,新输入不想更新。所以我试着调用了两个函数leadboardPage.configure_leadboard和leadboardPage.leadboard_creation,这两个函数基本上只需要将前9个项目放在排行榜标签上。 但是,当我以Main Menu.button2\f函数下面显示的方式调用它们时,我会收到以下错误消息: self.board1.configtext=Igraci_打印输出[0] AttributeError:类型对象“LeadboardPage”没有属性“board1”

我知道这是一个错误,告诉我不能以这种方式访问类属性。。。也许是我的错,我还没有完全理解关于类的所有内容

将tkinter作为tk导入 导入操作系统 大按钮字体='Lato',28 按钮字体='Lato',16 标题字体=‘铜版哥特式粗体’,38 BOARD_字体='Arial',15 类MultiPagetk.Tk: 定义初始自我,*args,**kwargs: tk.tk.\uuuu init\uuu self,*args,**kwargs container=tk.Frameself container.packside=top,fill=both,expand=True container.grid\u rowconfigure0,权重=1 container.grid\u column配置0,重量=1 self.frames={} 对于主菜单中的F,排行榜页面: frame=Fparent=container,controller=self self.frames[F]=帧 frame.gridrow=0,column=0,sticky=nsew self.show\u frameMain菜单 def显示帧自身,续: 帧=自身帧[续] 帧 类MainMenutk.Frame: 定义初始自身、父级、控制器: tk.Frame.\uuuu init\uuuu self,父 self.button2=tk.Buttonself,text='leadboard',font=BIG\u BUTTON\u font,width=10,command=lambda:self.button2\u fcontroller self.button2.packside='top',pady=0 def按钮2_fself,控制器: controller.show_框架排行榜页面 LeaderboardPage.configure_LeaderboardPage,LeaderboardPage.leaderboard_creationLeaderboardPage 类别排行榜PageTk.框架: 如果不是os.path.isfile'Lista_Igraca.txt': Lista_Igraca=打开'Lista_Igraca.txt','x' Lista_Igraca.close Lista_Igraca=打开'Lista_Igraca.txt','r' br_stranice=0 标记=[] igrac_class='place_hoder' num_igraca_class=-1 定义初始自身、父级、控制器: tk.Frame.\uuuu init\uuuu self,父 self.Lista_Igraca=打开'Lista_Igraca.txt','r' num_igraca=self.Lista_igraca中的行的sum1 self.Lista_Igraca.close self.num\u igraca\u class=num\u igraca Igraci_打印输出=[] Igraci_打印输出=自我排行榜_创建 self.board1=tk.Labelself,text=Igraci_打印输出[0],font=BOARD_字体,bg='black',fg='white' self.board2=tk.Labelself,text=Igraci_打印输出[1],font=BOARD_字体,bg='black',fg='white' self.board3=tk.Labelself,text=Igraci_打印输出[2],font=BOARD_字体,bg='black',fg='white' self.board4=tk.Labelself,text=Igraci_打印输出[3],font=BOARD_字体,bg='black',fg='white' self.board5=tk.Labelself,text=Igraci_打印输出[4],font=BOARD_字体,bg='black',fg='white' self.board6=tk.Labelself,text=Igraci_打印输出[5],font=BOARD_字体,bg='black',fg='white' self.board7=tk.Labelself,text=Igraci_打印输出[6],font=BOARD_字体,bg='black',fg='white' self.board8=tk.Labelself,text=Igraci_打印输出[7],font=BOARD_字体,bg='black',fg='white' self.board9=tk.Labelself,text=Igraci_打印输出[8],font=BOARD_字体,bg='black',fg='white' self.frame1=tk.Frameself,bg='black',bd=0 self.button1=tk.Buttonself.frame1,text='Next',font=BUTTON\u font,command=lambda:self.Next\u页面 self.buttonn2=tk.Buttonself.frame1,text='Exit',font=BUTTON\u font,command=lambda:self.Exit\u排行榜控制器 self.button3=tk.Buttonself.frame1,text='Prev',font=BUTTON\u font,command=lambda:self.previous\u页面 self.button1.packside=tk.RIGHT self.button2.packside=tk.RIGHT,padx=20 self.button3.packside=tk.RIGHT self.board1.packside=tk.TOP,anchor='n' self.board2.packside=tk.TOP,anchor='n' self.board3.packside=tk.TOP,anchor='n' self.board4.packside=tk.TOP,anchor='n' self.board5.packside=tk.TOP,anchor='n' self.board6.packside=tk.TOP,anchor='n' self.board7.packside=tk.TOP,anchor='n' self.board8.packside=tk.TOP,anchor='n' self.board9.packside=tk.TOP,anchor='n' 自我介绍 me1.packside=tk.BOTTOM,pady=30 def exit_排行榜自身,控制器: controller.show\u frameMain菜单 self.br_stranice=1 self.previous_页面 def排行榜\u创意本身: 如果leadboardPage.Lista_Igraca.tell不在self.marker中: self.marker.appendLeaderboardPage.Lista_Igraca.tell igrac=排行榜页面.Lista\u Igraca.readline 计数器1=0 Igraci_打印输出=[] 而计数器1!=9: igrac=igrac[:-1] Igraci_Printout.appendigrac 计数器1+=1 如果计数器1==9: 打破 igrac=排行榜页面.Lista\u Igraca.readline 如果igrac==: 而计数器1!=9: Igraci_Printout.append 计数器1+=1 self.igrac_class=igrac 返回Igraci_打印输出 def配置_排行榜自身,Igraci_打印输出: self.board1.configtext=Igraci_打印输出[0] self.board2.configtext=Igraci_打印输出[1] self.board3.configtext=Igraci_打印输出[2] self.board4.configtext=Igraci_打印输出[3] self.board5.configtext=Igraci_打印输出[4] self.board6.configtext=Igraci_打印输出[5] self.board7.configtext=Igraci_打印输出[6] self.board8.configtext=Igraci_打印输出[7] self.board9.configtext=Igraci_打印输出[8] def上一页自身: 如果不是self.br_stranice==0 或self.num\u igraca\u class<9 或os.path.getsize'Lista_Igraca.txt'==0: self.br_stranice-=1 排行榜页面.Lista_Igraca.seekself.marker[self.br_stranice] self.configure\u排行榜self.leadboard\u创建 def下一页自身: 如果不是self.igrac_类== 或self.num\u igraca\u class<9 或os.path.getsize'Lista_Igraca.txt'==0 或self.br_stranice+1*9==self.num\u igraca\u类: self.br_stranice+=1 self.configure\u排行榜self.leadboard\u创建 def写入排行榜名称、赢家、输家: 如果不是os.path.isfile'Lista_Igraca.txt': Lista_Igraca=打开'Lista_Igraca.txt','x' Lista_Igraca.close Lista_Igraca=打开'Lista_Igraca.txt','r' num_igraca=列表a_igraca中的行的sum1 Lista_Igraca.close fajl_unos=strf'{num_igraca+1}.\t{name}\t{wins}\t{loss}\n' Lista_Igraca=openLista_Igraca.txt,a Lista_Igraca.writestrfajl_unos Lista_Igraca.close LeadboardPage.num\u igraca\u类+=1 app=多页 app.mainloop
所以你可以试着用类来做这件事,有更聪明的方法,向你展示 关于推荐

import tkinter as tk


class MultiPage(tk.Tk):
    def __init__(self, parent=None, *args, **kwargs):                           # init your stuff / tk win = none
        tk.Tk.__init__(self, parent, *args, **kwargs)
        self.geometry("600x600")                                                # window options

        self.parent = parent

        self.border = tk.Frame(self)                                            # border frame
        self.border.pack(expand="yes", fill="both")

        self.mainmenu = MainMenu(self)                                          # import classes
        self.leaderboard = LeaderboardPage(self)

        self.mainmenu.frame_main.pack(side="top", fill="x", ipady="30")         # place your widgets (althought from other classes)
        self.leaderboard.leader.pack(side="left", fill="y", ipadx=30)


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

        self.parent = parent

        self.frame_main = tk.Frame(self.parent.border, bg="black")              # parent border to you main (you needn't this name border)


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

        self.parent = parent

        self.leader = tk.Frame(self.parent.border, bg="red")
        

if __name__ == '__main__':                                                          # run app
    MultiPage()
    tk.mainloop()

这个问题有太多似乎不必要的代码来表示问题中的问题。@BryanOakley我已经从第一类主菜单中删除了许多多余的内容。我不确定我应该从第二个排行榜页面删除什么,因为那个类是主要问题。在主菜单中:self.parent=parent和你的排行榜中,很多代码也在gui布局中。你需要参考你的tk.tk。添加到此父类=无并导入其他类您已经删除了关键代码片段-如何创建排行榜页面实例-并留下了一堆不必要的代码。例如,回答您的问题是否真的需要全部10个标签,或者一个带有单个标签的页面是否也适用于该问题?我建议您阅读此答案中链接到的一些问题和答案:感谢您的时间和答案,但我已经通过追踪Brayan Oakley在评论中添加的链接解决了这个问题。我将删除该问题,因为我的问题已经有了答案。谢谢你。我不会删除它的。也许它能帮助其他人