Python 在Tkinter应用程序中调用函数时创建的重复帧
这是我第一个利用tkinter的Python GUI项目。我来自R 在审阅了文档之后,我决定创建一个类来处理大部分工作。我的递增函数fwd()和bck()出现问题。如果我没有在以下代码块中调用这些函数: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()函数的工作方式与人
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):由于