我已经在应用程序中使用了自己的自定义信息框类tk.messagebox.showinfo
。 InfoBox
不适合我的需要,以适应恶劣的环境。但是msg
不能调整其大小以适合我放入的小部件。如何在不切割小部件的情况下使其尽可能小?
该类接收一个字符串image
和一个PhotoImage对象class InfoBox(tk.Toplevel):
def __init__(self, parent, msg, image):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.msg = msg
self.image = image
self.title = "Gassy"
self.font = font.Font(family="Optima", size=20)
frame_left = tk.Frame(self)
frame_right = tk.Frame(self)
frame_left.grid(row=0, column=0, sticky=tk.NSEW)
frame_right.grid(row=0, column=1, sticky=tk.NSEW)
tk.Label(frame_left, image=self.image).grid(row=0, column=0, sticky=tk.N)
textbox = tk.Text(frame_right, font=self.font)
textbox.grid(row=0, column=0)
textbox.insert(tk.END, self.msg)
textbox.config(state=tk.DISABLED)
tk.Button(frame_left, text="Den er grei!", font=self.font, command=self.destroy).grid(row=1, column=0)
,它们放置在InfoBox中。我添加了一个这样的InfoBox的屏幕截图。
Item1
Item2
Item3
...
答案 0 :(得分:2)
正如@kevin所提到的,它可以按预期工作,textwidget
大部分是空的,并且占据了很大的空白区域,这就是让您认为几何图形管理器没有将窗口缩小到小部件的原因。
此:
(我删除了没有提供的图像和字体,并且没有必要)
import tkinter as tk
class InfoBox(tk.Toplevel):
def __init__(self, parent, msg):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.msg = msg
self.title = "Gassy"
frame_left = tk.Frame(self)
frame_right = tk.Frame(self)
frame_left.grid(row=0, column=0, sticky=tk.NSEW)
frame_right.grid(row=0, column=1, sticky=tk.NSEW)
# textbox = tk.Text(frame_right)
# textbox.grid(row=0, column=0)
# textbox.insert(tk.END, self.msg)
# textbox.config(state=tk.DISABLED)
tk.Button(frame_left, text="Den er grei!", command=self.destroy).grid(row=1, column=0)
root = tk.Tk()
info = InfoBox(root, '123 ' * 1000)
root.mainloop()
产生:
而:
import tkinter as tk
class InfoBox(tk.Toplevel):
def __init__(self, parent, msg):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.msg = msg
self.title = "Gassy"
frame_left = tk.Frame(self)
frame_right = tk.Frame(self)
frame_left.grid(row=0, column=0, sticky=tk.NSEW)
frame_right.grid(row=0, column=1, sticky=tk.NSEW)
textbox = tk.Text(frame_right)
textbox.grid(row=0, column=0)
textbox.insert(tk.END, self.msg)
textbox.config(state=tk.DISABLED)
tk.Button(frame_left, text="Den er grei!", command=self.destroy).grid(row=1, column=0)
root = tk.Tk()
info = InfoBox(root, '123 ' * 1000)
root.mainloop()
产生此:
很明显,Toplevel
子类将其大小调整为包含的小部件
测试窗口小部件以一定大小显示,而不管其内容如何。 Toplevel
会根据窗口小部件的大小进行调整,而不是根据文本窗口小部件中插入的内容进行调整;就像使用文本处理器基本窗口一样,在键入或编辑文本时,文本处理器不会缩小或扩展。这里也一样。
关键字args width
和height
允许配置文本窗口小部件的大小(以字符数或行数表示)