我正在创建一个简单的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按钮,索引都会递增;然后添加新行,并将按钮移低一行。
我做错了什么?我想确保窗口的所有内容完全适合窗口(标题栏等),并且在调整大小时不会被隐藏。
正如在注释部分中所讨论的,我为每个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)