wm_title("消息")被tkinter窗口切断了?

时间:2016-09-11 14:36:51

标签: python-2.7 python-3.x tkinter

我正在创建一个简单的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时,索引都会递增;然后它会添加一个新行并将按钮向下移动一行。

我做错了什么? 我想确保窗口的所有内容完全适合窗口(标题栏等),并且在调整大小时不会隐藏。

1 个答案:

答案 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()