Python 在Tkinter应用程序中调用函数时创建的重复帧

Python 在Tkinter应用程序中调用函数时创建的重复帧,python,python-3.x,tkinter,tk,Python,Python 3.x,Tkinter,Tk,这是我第一个利用tkinter的Python GUI项目。我来自R 在审阅了文档之后,我决定创建一个类来处理大部分工作。我的递增函数fwd()和bck()出现问题。如果我没有在以下代码块中调用这些函数: class App: def __init__(self, master): .... self.total = 2 self.fwd() self.bck() 整个代码的输出是一个空的tkinter帧 另一方面,如果我真的调用它们,fwd()函数的工作方式与人

这是我第一个利用tkinter的Python GUI项目。我来自R

在审阅了文档之后,我决定创建一个类来处理大部分工作。我的递增函数fwd()和bck()出现问题。如果我没有在以下代码块中调用这些函数:

class App:
def __init__(self, master):
    ....
    self.total = 2
    self.fwd()
    self.bck()
整个代码的输出是一个空的tkinter帧

另一方面,如果我真的调用它们,fwd()函数的工作方式与人们预期的一样,但是每次单击后退按钮(command=bck()),一个新的、相同的GUI将直接连接到当前GUI的底部。如果我再次单击后退按钮,另一个GUI将在当前GUI后面弹出

from tkinter import *
from tkinter import font
from tkinter import filedialog

class App: #I'm not typing what goes in this class, this way I can avoid issues with App(Frame), etc. DUCKTYPE!
def __init__(self, master):
    self.frame = Frame(master)
    self.frame.pack()
    self.master = master
    master.title("PyCCI Caste")
    self.total = 2
    self.fwd() #Need to call these at the beginning otherwise the window is minimized??? No idea why.
    self.bck() #The back button creates a duplicate window...

## +Incrementer
def fwd(self):
    self.total += 1
    print(self.total)

## -Incrementer THIS CREATES A SECOND PANED WINDOW, WHY?!
def bck(self):
    self.total += -1
    if self.total < 3:
        self.total = 2
    print(self.total)


#Body
    self.k1 = PanedWindow(self.frame, #Note: if this is not self.frame, the error: 'App' object has no attribute 'tk' is thrown
                          height=500,
                          width=750,
                          orient = VERTICAL)
    self.k1.pack(fill=BOTH, expand = 1)
    self.titlefont = font.Font(size = 12,
                               weight = 'bold')
    self.boldfont = font.Font(size=8,
                              weight = 'bold')
    self.textfont = font.Font(family = 'Arial',
                              size = 10)

#Title
    self.title = PanedWindow(self.k1)
    self.k1.add(self.title, padx = 10, pady = 10)
    Label(self.title, text = "Chronic Critically Ill Patient GUI",
          font = self.titlefont,
          fg="darkslateblue").pack()

#Top row open csv window & button
    self.k2 = PanedWindow(self.k1)
    self.k1.add(self.k2)
    self.openbutton = Button(self.k2,
                             text = "Open CSV")#, command = openfile())
    self.openbutton.pack(side = LEFT,
                         padx = 30)

#Panes below buttons
    self.k3 = PanedWindow(self.k1)
    self.k1.add(self.k3)
    self.leftpane = PanedWindow(self.k3)
    self.k3.add(self.leftpane,
                width = 400,
                padx = 30,
                pady = 25,
                stretch = "first")
    self.separator = PanedWindow(self.k3,
                                 relief = SUNKEN)
    self.k3.add(self.separator,
                width=2,
                padx=1,
                pady=20)
    self.rightpane = PanedWindow(self.k3)
    self.k3.add(self.rightpane,
                width = 220,
                padx = 10,
                pady = 25,
                stretch = "never")

#Left pane patient note text frame doo-diddly
    self.ptframe = LabelFrame(self.leftpane,
                              text = "Medical Record",
                              font = self.boldfont,
                              padx = 0,
                              pady=0,
                              borderwidth = 0)
    self.ptframe.pack()
    Label(self.ptframe,
          text = "patient # of ##").pack()

#Incrementer buttons
    self.buttonframe = Frame(self.ptframe)
    self.buttonframe.pack()
    self.buttonframe.place(relx=0.97, anchor = NE)
    #Back Button
    self.button1 = Button(self.buttonframe, text = 'Back', width = 6, command = self.bck)
    self.button1.grid(row = 0, column = 0, padx = 2, pady = 2)
    #Next Button
    self.button2 = Button(self.buttonframe, text = 'Next', width = 6, command = self.fwd)
    self.button2.grid(row = 0, column = 2, padx = 2, pady = 2)

#Scrollbar!
    self.ptscroll = Scrollbar(self.ptframe)
    self.ptscroll.pack(side = RIGHT, fill = Y)
    self.pttext = Text(self.ptframe,
                       height=300,
                       width=400,
                       wrap=WORD,
                       font=self.textfont,
                       spacing1=2,
                       spacing2=2,
                       spacing3=3,
                       padx=15,
                       pady=15)
    self.pttext.pack()
    self.ptscroll.config(command=self.pttext.yview)
    self.pttext.config(yscrollcommand=self.ptscroll.set)

#Checkbuttons
    self.checkframe = LabelFrame(self.rightpane, text="Indicators",
                                 font=self.boldfont,
                                 padx = 10,
                                 pady = 10,
                                 borderwidth=0)
    self.checkframe.pack()
    self.check1 = Checkbutton(self.checkframe, text="Non-Adherence")
    self.check1.grid(row = 1,
                     column = 0,
                     sticky = W)

root = Tk()
app = App(root) ## apply the class "App" to Tk()

### Menu stuff does not need to be part of the class
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Open CSV")#, command=openfile)
menubar.add_cascade(label="File", menu=filemenu)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="About")#, command=about)
menubar.add_cascade(label="Help", menu=helpmenu)
root.config(menu=menubar)
root.mainloop()
从tkinter导入*
从tkinter导入字体
从tkinter导入文件对话框
类应用程序:#我不会输入这个类中的内容,这样我可以避免应用程序(框架)等问题。DUCKTYPE!
定义初始(自我,主):
self.frame=帧(主)
self.frame.pack()
self.master=master
硕士头衔(“皮奇种姓”)
self.total=2
self.fwd()#需要在开始时调用这些,否则窗口将最小化???不知道为什么。
self.bck()#后退按钮会创建一个重复的窗口。。。
##+递增器
def fwd(自):
总自我价值+=1
打印(总数)
##-递增这会创建第二个窗格窗口,为什么?!
def bck(自身):
总自我价值+=-1
如果self.total<3:
self.total=2
打印(总数)
#身体
self.k1=PanedWindow(self.frame,#注意:如果这不是self.frame,则抛出错误:“App”对象没有属性“tk”
高度=500,
宽度=750,
方向=垂直)
self.k1.pack(填充=两者,扩展=1)
self.titlefont=font.font(大小=12,
权重=‘粗体’)
self.boldfont=font.font(大小=8,
权重=‘粗体’)
self.textfont=font.font(family='Arial',
尺寸=10)
#头衔
self.title=PanedWindow(self.k1)
self.k1.add(self.title,padx=10,pady=10)
标签(self.title,text=“慢性重症患者GUI”,
font=self.titlefont,
fg=“darkslateblue”).pack()
#顶行打开csv窗口和按钮
self.k2=窗格窗口(self.k1)
self.k1.add(self.k2)
self.openbutton=按钮(self.k2,
text=“Open CSV”)#,command=openfile()
self.openbutton.pack(侧面=左侧,
padx=30)
#按钮下方的窗格
self.k3=窗格窗口(self.k1)
self.k1.add(self.k3)
self.leftpane=PanedWindow(self.k3)
self.k3.add(self.leftpane,
宽度=400,
padx=30,
帕迪=25,
stretch=“first”)
self.separator=PanedWindow(self.k3,
浮雕(下沉)
self.k3.add(self.separator,
宽度=2,
padx=1,
帕迪=20)
self.rightpane=PanedWindow(self.k3)
self.k3.add(self.rightpane,
宽度=220,
padx=10,
帕迪=25,
stretch=“从不”)
#左窗格患者注释文本框doo DIDDY
self.ptframe=LabelFrame(self.leftpane,
text=“病历”,
font=self.boldfont,
padx=0,
帕迪=0,
边框宽度=0)
self.ptframe.pack()
标签(self.ptframe,
text=“patient”of“).pack()
#递增按钮
self.buttonframe=Frame(self.ptframe)
self.buttonframe.pack()
自身按钮框架位置(relx=0.97,锚定=NE)
#后退按钮
self.button1=按钮(self.buttonframe,text='Back',width=6,command=self.bck)
self.button1.grid(行=0,列=0,padx=2,pady=2)
#下一个按钮
self.button2=按钮(self.buttonframe,text='Next',width=6,command=self.fwd)
self.button2.grid(行=0,列=2,padx=2,pady=2)
#滚动条!
self.ptscroll=滚动条(self.ptframe)
self.ptscroll.pack(侧=右,填充=Y)
self.pttext=文本(self.ptframe,
高度=300,
宽度=400,
wrap=WORD,
font=self.textfont,
间距1=2,
间距2=2,
间距3=3,
padx=15,
帕迪=15)
self.pttext.pack()
self.ptscroll.config(命令=self.pttext.yview)
self.pttext.config(yscrollcommand=self.ptscroll.set)
#检查按钮
self.checkframe=LabelFrame(self.rightpane,text=“Indicators”,
font=self.boldfont,
padx=10,
帕迪=10,
边框宽度=0)
self.checkframe.pack()
self.check1=检查按钮(self.checkframe,text=“不遵守”)
self.check1.grid(行=1,
列=0,
粘性=W)
root=Tk()
app=app(root)##将类“app”应用于Tk()
###菜单内容不需要成为课程的一部分
菜单栏=菜单(根)
filemenu=Menu(menubar,tearoff=0)
filemenu.add_命令(label=“Open CSV”)#,command=openfile)
menubar.add_级联(label=“File”,menu=filemenu)
帮助菜单=菜单(菜单栏,TEAROF=0)
helpmenu.add_命令(label=“About”)#,command=About)
菜单栏.add_级联(label=“Help”,menu=helpmenu)
root.config(menu=menubar)
root.mainloop()
你们怎么看?如果我遗漏了任何相关信息,请告诉我。我遇到的困难是,我不知道关于Python/Tkinter我还不知道什么

谢谢,我真的很感激任何洞察力和方向

已解决(感谢Bryan Oakley&TigerhawkT3):由于