You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter开发eTasks GUI时Frame未显示问题求助

解决eTasks GUI中Frame不显示的问题并添加三个任务文件夹Frame

我看了你代码里的问题啦,主要是taskframe没显示的核心原因是你用了pack_propagate(False)但没给它设置具体尺寸,而且pack的时候没加expand=True,导致它没有足够的空间渲染出来。另外你要添加三个任务文件夹的Frame,咱们一步步来修复:

第一步:修复taskframe的显示问题

原代码里的taskframe.pack(fill=BOTH)加上expand=True,同时可以去掉pack_propagate(False)(除非你明确要固定Frame大小,不然让它根据子组件自适应更灵活)。如果非要保留pack_propagate(False),那必须给taskframe设置width和height参数,比如taskframe=tk.Frame(..., width=800, height=600)。

第二步:添加三个任务文件夹Frame

在修复后的taskframe里,我们可以用grid布局来均分空间,让三个Frame横向排列,每个Frame设置不同的背景色区分,加上标题标签方便识别。

下面是修改后的完整代码,我标注了关键修改点:

import tkinter as tk 
from tkinter import ttk
from time import strftime
from datetime import date

todohome=tk.Tk()
todohome.geometry('500x500+100+100')
todohome.attributes('-fullscreen', True)
todohome.overrideredirect(True)
todohome.configure(bg='white')

# 顶部控制栏Frame
ctrlfrme=tk.Frame(todohome, relief='groove', highlightbackground='black', highlightthickness=1)
ctrlfrme.pack(anchor='n', side=tk.TOP, fill=tk.X)

Clsewindowbutton=ttk.Button(ctrlfrme, text='X', command=todohome.destroy, width=10)
Clsewindowbutton.pack(side=tk.LEFT, anchor=tk.NE)

def minimise():
    todohome.overrideredirect(False)
    todohome.state(newstate='iconic')
        
MinButton=ttk.Button(ctrlfrme, text='-', width=10, command=minimise)
MinButton.pack(side=tk.RIGHT, anchor=tk.SW)

# 快速栏Frame
quickbar=tk.Frame(todohome, relief="groove", highlightbackground="black", highlightthickness=1)
quickbar.pack(anchor='n', side=tk.TOP, pady=5, fill=tk.X)  # 加fill=X让它铺满窗口宽度

Welcome=tk.Label(quickbar, font=('calibri', 20), text="Welcome to eTasks")
Welcome.pack(side=tk.LEFT, anchor="w")

def time():
    ctime=strftime('Time: %H:%M:%S')
    clock.config(text=ctime)
    clock.after(1000, time)

clock=tk.Label(quickbar, font=('calibri', 20), foreground='black')
clock.pack(anchor='n', side=tk.RIGHT, padx=20)

def getdate():
    today = date.today()
    cdate = today.strftime("%d/%m/%Y")
    datecal=tk.Label(quickbar, font=('calibri', 20), foreground='black', text=cdate)
    datecal.pack(anchor='n', side=tk.LEFT, padx=100)

# 修复后的任务主Frame
taskframe=tk.Frame(todohome, relief="groove", highlightbackground="black", highlightthickness=1, bg='red')
# 去掉pack_propagate(False),让它根据子组件自适应;若要固定大小可保留并添加width/height
# taskframe.pack_propagate(False)
taskframe.pack(fill=tk.BOTH, expand=True)  # 关键:加expand=True让它占满剩余窗口空间

# 添加三个任务文件夹Frame,用grid布局均分空间
taskframe.grid_columnconfigure((0,1,2), weight=1)  # 三列均分宽度
taskframe.grid_rowconfigure(0, weight=1)  # 一行占满高度

# 第一个任务文件夹:待办任务
folder1 = tk.Frame(taskframe, bg='lightblue', relief='ridge', highlightthickness=1)
folder1.grid(row=0, column=0, padx=5, pady=5, sticky='nsew')
tk.Label(folder1, text="待办任务", font=('calibri',16)).pack(pady=10)

# 第二个任务文件夹:进行中任务
folder2 = tk.Frame(taskframe, bg='lightgreen', relief='ridge', highlightthickness=1)
folder2.grid(row=0, column=1, padx=5, pady=5, sticky='nsew')
tk.Label(folder2, text="进行中任务", font=('calibri',16)).pack(pady=10)

# 第三个任务文件夹:已完成任务
folder3 = tk.Frame(taskframe, bg='lightcoral', relief='ridge', highlightthickness=1)
folder3.grid(row=0, column=2, padx=5, pady=5, sticky='nsew')
tk.Label(folder3, text="已完成任务", font=('calibri',16)).pack(pady=10)

getdate()
time()
todohome.mainloop()

关键修改说明:

  • 给taskframe.pack()加上expand=True,让它能填充窗口的剩余空间(这是原Frame不显示的核心修复点)
  • 去掉pack_propagate(False),如果需要固定taskframe大小,可保留并添加width和height参数
  • 给quickbar加上fill=tk.X,让它铺满窗口宽度,布局更美观
  • 用grid布局在taskframe里创建了三个均分空间的任务文件夹Frame,每个Frame设置sticky='nsew'来填充分配到的空间
  • 每个任务Frame添加了标题标签,方便区分不同的任务文件夹

这样修改后,三个任务文件夹Frame就能正常显示啦,你可以根据自己的需求调整每个Frame的样式和内容~

内容的提问来源于stack exchange,提问作者Minion123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:15:49