我正在创建一个简单的tkinter窗口弹出窗口(pastebin link:http://pastebin.com/kvv0G4rM)。我面临的问题是标题信息("输入费用")从弹出的tkinter窗口中被切断。
我已经尝试调整tkinter窗口的大小并将其移动到中心。在这种情况下,标签,按钮一切都没有完全填满屏幕。 (尝试注释掉高度和大小注释以及.geometry函数调用)
看起来像这样
The current scenario of the lables and buttons
我正在使用网格,因为我必须动态添加每个行"添加费用"按钮按下。查看函数(add_row)。索引变量保留新条目字段将插入的数字行的计数。
这个问题类似于: - What controls automated window resizing in Tkinter?
唯一的问题是当我手动调整大小时,我会失去自动调整大小的行为。这对于我后来的tkinter窗口行为的一半是必要的(即我在&#34上添加新的Entry字段;添加费用"按下按钮。)。
我包括以下代码: -
self.root = master
self.root.wm_title("Enter Expenses")
self.frame = tkinter.Frame(master)
self.frame.grid()
self.button = tkinter.Button(self.frame,
text="QUIT", fg="red",
command=self.exit)
self.button.grid(row=0,column=0)
self.slogan = tkinter.Button(self.frame,
text="Add Expense",
command=self.create_expenseTable)
self.slogan.grid(row=0,column=1)
def create_expenseTable(self):
global index
global expenseReport
self.frame.destroy()
self.frame = tkinter.Frame()
self.frame.grid()
tkinter.Label(self.frame,text="Category").grid(row=index,column=0)
tkinter.Label(self.frame,text="Amount").grid(row=index,column=1)
index+=1
self.e1 = tkinter.Entry(self.frame)
self.e2 = tkinter.Entry(self.frame)
self.e1.grid(row=index, column=0)
self.e2.grid(row=index, column=1)
index+=1
self.create_button()
def create_button(self):
global index
self.slogan = tkinter.Button(self.frame,
text="Add Expense",
command=self.add_row)
self.slogan.grid(row=index,column=1)
self.submit = tkinter.Button(self.frame,text="Submit Expense",command=self.endFunction)
self.submit.grid(row=index,column=0)
def add_row(self):
global index
global expenseReport
self.slogan.destroy()
self.submit.destroy()
category = self.e1.get()
expense = self.e2.get()
self.e1 = tkinter.Entry(self.frame)
self.e2 = tkinter.Entry(self.frame)
self.e1.grid(row=index,column=0)
self.e2.grid(row=index,column=1)
index+=1
self.create_button()
每次点击add_expense时,索引都会递增;然后它会添加一个新行并将按钮向下移动一行。
我做错了什么? 我想确保窗口的所有内容完全适合窗口(标题栏等),并且在调整大小时不会隐藏。
答案 0 :(得分:0)
正如评论部分所讨论的,我为每个添加新行函数调用增加了tkinter窗口的高度和宽度。这增加了tkinter窗口大小的响应性。 我正在粘贴一个虚拟代码,显示每个" Add Expense"按钮单击。任何类型的代码审查评论都受到欢迎。
try:
import Tkinter as tkinter
except ImportError:
import tkinter as tkinter
import sys
index = 0
width = 0
height = 0
x=0
y=0
class gui:
def __init__(self):
root = tkinter.Tk()
self.initialise_GUI(root)
root.mainloop()
def initialise_GUI(self,master):
global height,width
width = 304
height = 30
self.root = master
width_screen = self.root.winfo_screenwidth()
height_screen = self.root.winfo_screenheight()
x = (width_screen/2)-(width/2)
y = (height_screen/2)-(height/2)
self.root.geometry('%dx%d+%d+%d' %(width,height,x,y))
self.root.wm_title("Expense Manager")
self.frame = tkinter.Frame(master)
self.frame.grid()
self.button = tkinter.Button(self.frame,
text="QUIT", fg="red",width=15,
command=self.exit)
self.button.grid(row=0,column=0)
self.slogan = tkinter.Button(self.frame,width=16,
text="Add Expense",
command=self.create_expenseTable)
self.slogan.grid(row=0,column=1)
self.root.protocol("WM_DELETE_WINDOW", self.destroy_application)
def exit(self):
self.root.destroy()
def create_expenseTable(self):
global index,x,y,height,width
width +=30
height +=40
self.frame.destroy()
self.frame = tkinter.Frame()
self.frame.grid()
tkinter.Label(self.frame,text="Category").grid(row=index,column=0)
tkinter.Label(self.frame,text="Amount").grid(row=index,column=1)
index+=1
self.e1 = tkinter.Entry(self.frame)
self.e2 = tkinter.Entry(self.frame)
self.e1.grid(row=index, column=0)
self.e2.grid(row=index, column=1)
self.root.geometry('%dx%d+%d+%d' %(width,height,x,y))
index+=1
self.create_button()
def create_button(self):
global index
global height
global index
height+=10
self.slogan = tkinter.Button(self.frame,
text="Add Expense",
command=self.add_row)
self.slogan.grid(row=index,column=1)
self.submit = tkinter.Button(self.frame,text="Submit Expense",command=self.exit)
self.submit.grid(row=index,column=0)
def add_row(self):
global index
global expenseReport
global x,y,height,width
height+=10
self.slogan.destroy()
self.submit.destroy()
category = self.e1.get()
expense = self.e2.get()
self.e1 = tkinter.Entry(self.frame)
self.e2 = tkinter.Entry(self.frame)
self.e1.grid(row=index,column=0)
self.e2.grid(row=index,column=1)
index+=1
self.root.geometry('%dx%d+%d+%d' %(width,height,x,y))
self.create_button()
"""other code logic using category and expense"""
def destroy_application(self):
self.root.destroy()
sys.exit(1)
if __name__ == "__main__":
obj = gui()