当前位置: 首页 > 知识库问答 >
问题:

wm_标题(“消息”)被tkinter窗口切断?

危裕
2023-03-14

我正在创建一个简单的tkinter窗口弹出窗口(粘贴链接:http://pastebin.com/kvv0G4rM).我面临的问题是标题信息(“输入费用”)从弹出的tkinter窗口中被切断。

我尝试过调整tkinter窗口的大小并将其移到中心。在这种情况下,标签、按钮的所有内容都不会完全填满屏幕。(尝试注释掉高度和尺寸注释以及.geometry函数调用)

看起来像这样

标签和按钮的当前场景

我使用网格,因为我必须为每次按下“添加费用”按钮动态添加行。请参阅函数(添加行)。index变量保留新输入字段将插入到哪个数字行的计数。

这个问题类似于:-什么控制Tkinter中的自动窗口大小调整?

唯一的问题是,当我手动调整大小时,我会失去自动调整大小的行为。这对于我的tkinter窗口行为的后半部分是必需的(即当我在“添加费用”按钮上添加新的输入字段时)。

我包括以下代码:-

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个答案

万俟高峻
2023-03-14

正如在注释部分中所讨论的,我为每个addnewrow函数调用增加了tkinter窗口的高度和宽度。这增加了tkinter窗口大小的响应能力。我粘贴了一个伪代码,显示每次单击“添加费用”按钮时窗口大小的增加。任何类型的代码审查评论都是非常受欢迎的。

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()
 类似资料:
  • 问题内容: 我想在ubuntu上运行的python脚本中显示一个信息窗口。我正在使用以下代码: 这可以工作,但是会显示一个空窗口,顶部是消息框。我如何摆脱窗口而只将消息框居中放在屏幕上(窗口管理器是gnome 2)? 这只是为了显示命令行脚本中的一些信息(密码,这就是为什么我不想仅将其回显到控制台)。 问题答案: Tkinter必须具有根窗口。如果您不创建一个,则会为您创建一个。如果您不需要此根窗

  • 在前两章,程序使用了同一个函数MessageBox来向使用者输出文字。MessageBox函数会建立一个「窗口」。在Windows中,「窗口」一词有确切的含义。一个窗口就是屏幕上的一个矩形区域,它接收使用者的输入并以文字或图形的格式显示输出内容。 MessageBox函数建立一个窗口,但这只是一个功能有限的特殊窗口。消息窗口有一个带关闭按钮的标题列、一个选项图标、一行或多行文字,以及最多四个按钮。

  • 我有一个 窗口,我从该窗口中删除了标题栏,并添加了一个自定义的“关闭”和“最小化”按钮。当程序首次加载时,它不会向任务栏显示图标。当我单击定制的最小化按钮时,它会在任务栏上创建一个图标;然而,当我单击恢复窗口时,我无法再次摆脱标题栏。 我希望图标始终显示在任务栏上,并且当程序最小化然后还原时,我希望标题栏仍然从 中消失。不幸的是,我很难在最小化之前和之后重置标志而不使任务栏图标消失。 请让我知道我

  • 主要内容:创建一个空白窗口,设置窗的位置主窗口控件(window)是一切控件的基础,它好比是一台高速运转的机器,而其他控件则相当于这台机器上的部件,比如齿轮、链条、螺丝等等。由此我们知道,主窗口是一切控件的基础,所有的控件的都需要通过主窗口来显示。 Tkinter 提供了一些关于主窗口对象的常用方法,在本节对这些方法做简单的介绍。 创建一个空白窗口 Tkinter 能够很方便地创建一个空白窗口,示例代码如下: 程序运行结果如下: 图1:

  • 问题内容: 如何从窗口标题栏中删除tkinter图标 问题答案: 在Windows上 步骤1: 使用图标编辑器或类似rw-designer的网站创建透明图标。另存为。 第二步: 在Unix上 类似,但使用图标。

  • 我试图创建一个程序,它有一个tkinter窗口打开,然后当你按下一个按钮,它关闭tkinter窗口,打开一个pyplay窗口。然而,当我点击按钮打开pyplay窗口时,它会打开pyplay窗口,而tkinter窗口保持打开状态。 代码: 我还尝试使用: 我怎样才能解决这个问题?(我正在MacOS 11.1上运行Python 3.7.7)