簡體   English   中英

tkinter.Toplevel大小自動適合其小部件

[英]tkinter.Toplevel size automatically fit its widgets

我已經制作了自定義的InfoBoxInfoBox ,該類正在我的應用程序中使用。 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 widthheight允許配置文本小部件的大小(以字符數或行數為單位)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM