我試圖創建一些 custum tkinter 物件來更容易地構建我的 GUI,但不幸的是我做不到。例如,如果我想要一個物件來識別放置在另一個框架內的框架怎么辦?為此,我寫了它:
主要代碼(檔案名:“test.py”):
import tkinter as tk
from tkinter import ttk
import ttk_plus as ttkp # my custom library
parent=tk.Tk()
parent.geometry("686x424 370 100")
parent.title("Test")
parent.configure(background="#f0f0f0")
parent.minsize(686, 424)
MyFrame=ttkp.Frame(parent) # my custom object
MyFrame.pack(padx=(5,5), pady=(5,5))
parent.mainloop()
庫(檔案名:“ttk_plus.py”):
class Frame(tk.Frame):
def __init__(self, container):
super().__init__(container)
self.container=container
# definisco il frame principale:
self.Frame1=tk.Frame(self.container, background="white")
# definisco il frame secondario:
self.Frame2=tk.Frame(self.Frame1, background="white", highlightbackground="red", highlightthickness=1)
self.Frame2.pack(padx=(5, 5), pady=(5, 5), fill=tk.BOTH)
如果我運行“test.py”,軟體啟動時沒有任何問題,但我在主視窗中看不到我的專案。我哪里做錯了?
uj5u.com熱心網友回復:
如果您正在創建自定義框架,則在此框架中創建的每個小部件都必須是框架的后代,而不是容器。否則,Frame將以意想不到的方式影響其父級。
self.Frame1=tk.Frame(self, background="white")
您還需要確保在此內部框架上呼叫一些幾何管理器 ( pack, place, )。grid否則,此框架和其中的任何小部件將不可見。
由于它是容器中唯一的直接子元素,pack因此是最簡單的:
self.Frame1.pack(fill="both", expand=True)
最后,由于目前您只創建框架,您可能想要給框架一個大小,或者使用幾何管理器屬性使其填充視窗。
MyFrame.pack(padx=(5,5), pady=(5,5), fill="both", expand=True)
uj5u.com熱心網友回復:
在您的自定義框架中,Frame1是Frame2. 您已打包Frame2但沒有打包,因此它根本不在您的視窗中。
使固定
嘗試打包您的Frame1:
self.Frame1=tk.Frame(self.container, background="white")
self.Frame1.pack(fill="both", expand=True)
結果將是:

只是為了檢查它是否正常作業,請嘗試將示例按鈕添加到Frame2

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465533.html
上一篇:從整個陣列中獲取資訊到變數?
