![](/img/trans.png)
[英]Are there any ways to bind the enter key to a Tkinter.Toplevel() window in Python?
[英]tkinter.Toplevel size automatically fit its widgets
我已經制作了自定義的InfoBox
類InfoBox
,該類正在我的應用程序中使用。 tk.messagebox.showinfo
不適合我的需要,以適應惡劣的環境。 但是InfoBox
不會調整其大小以適合我放置在其中的小部件。 如何在不切割小部件的情況下使其盡可能小?
該類接收一個字符串msg
和一個PhotoImage對象image
,它們放置在InfoBox中。 我添加了一個這樣的InfoBox的屏幕截圖。
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)
正如@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
允許配置文本小部件的大小(以字符數或行數為單位)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.