Tkinter Message控件的宽度需要一致?
from tkinter import *
root=Tk()
root.geometry("300x500")
root.option_add("*font","汉仪长艺体简 33")
root.option_add("*foreground","navy")
def fe(m):
for i in m:
Message(root,text=i,background="limegreen",aspect=200).pack()
if __name__=="__main__":
fe(["docx","pdf","jpg","mp3","mp4"])
要求:5个 Message 控件的宽度一样大小 ! 在Tkinter中,要使多个 Message 控件的宽度一致,可以通过固定 width 属性(单位为字符数)实现。以下是修改后的代码:
from tkinter import *
root = Tk()
root.geometry("300x500")
root.option_add("*font", "汉仪长艺体简 33")
root.option_add("*foreground", "navy")
def fe(m):
# 设置固定宽度(例如200字符单位)
for i in m:
Message(root,
text=i,
background="limegreen",
width=200# 关键:固定宽度值
).pack()
if __name__ == "__main__":
# 示例文本列表
texts = [
"文本1",
"较长的文本示例,但宽度会保持一致",
"文本3",
"另一段更长的文本内容,同样受宽度限制自动换行",
"最后一条"
]
fe(texts)
root.mainloop()
### 关键说明:
1. width=200:所有控件使用相同的字符宽度单位(200个平均字符宽度)
2. 效果:
- 短文本两侧留白
- 长文本自动换行但宽度不变
- 所有控件宽度严格一致
### 注意事项:
- 调整 width 值可控制实际宽度(值越大越宽)
- 删除 aspect 参数,因其与固定宽度冲突
- 文本超宽时会自动换行,高度自适应
> 提示:若需像素级精确控制,建议改用 Label + wraplength 方案,但 Message 在长文本换行时更稳定。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 试试
from tkinter import *
root = Tk()
root.geometry("300x500")
root.option_add("*font", "汉仪长艺体简 33")
root.option_add("*foreground", "navy")
def fe(m):
# 设置固定宽度(根据窗口宽度调整)
fixed_width = 250
for i in m:
Message(root,
text=i,
background="limegreen",
aspect=200,
width=fixed_width).pack()
if __name__ == "__main__":
fe(["docx", "pdf", "jpg", "mp3", "mp4"])
root.mainloop()
某一个“天” 发表于 2025-8-16 12:31
试试
不能固定宽度的!
from tkinter import *
root = Tk()
root.geometry("300x500")
root.option_add("*font", "汉仪长艺体简 33")
root.option_add("*foreground", "navy")
def fe(m):
# 设置固定宽度(根据窗口宽度调整)
fixed_width = 250
for i in m:
Message(root,
text=i,
background="limegreen",
width=fixed_width).pack()
if __name__ == "__main__":
fe(["docx", "pdf", "jpg", "mp3", "mp4"])
root.mainloop()
使用Label替代Message,设置固定宽度(像素单位)
from tkinter import *
root = Tk()
root.geometry("300x500")
root.option_add("*font", "汉仪长艺体简 33")
root.option_add("*foreground", "navy")
def fe(m):
frame = Frame(root, width=300)
frame.pack()
for i in m:
lbl = Label(
frame,
text=i,
background="limegreen",
anchor="w",# 文本左对齐
padx=10,# 增加左右内边距
pady=5,# 增加上下内边距
wraplength=200
)
lbl.pack(fill="x", pady=0)
if __name__ == "__main__":
fe(["docx", "pdf", "jpg", "mp3", "mp4"])
root.mainloop() ydwb 发表于 2025-8-16 13:57
使用Label替代Message,设置固定宽度(像素单位)
from tkinter import *
使 用 Label 是 可 以 的 ,现 在 是 要 使 用 Message 啊 ! 某一个“天” 发表于 2025-8-16 13:38
不 行 啊 ! 你既然用message 就应该创一个msg 变量
然后加换行和新内容 要不然还不如Label 某一个“天” 发表于 2025-8-16 15:03
要不然还不如Label
Label 很容易就做到了,对于 Message 我再想一想! from tkinter import *
root = Tk()
root.geometry("300x500")
root.option_add("*font","汉仪长艺体简 33")
root.option_add("*foreground", "navy")
def fe(m):
# 创建主容器Frame(宽度300像素)
main_frame = Frame(root, width=300)
main_frame.pack(pady=0)
for i in m:
# 创建内部容器Frame(宽度200像素,绿色背景)
inner_frame = Frame(
main_frame,
width=200,
height=80,# 固定高度
background="limegreen",
highlightthickness=0# 去掉边框
)
inner_frame.pack(pady=0)# 添加垂直间距
inner_frame.pack_propagate(False)# 固定尺寸
# 创建Message组件并放入内部容器
msg = Message(
inner_frame,
text=i,
background="limegreen",
width=200
)
msg.pack(fill="both", expand=True)# 填充整个内部容器
if __name__ == "__main__":
fe(["docx", "pdf", "jpg", "mp3", "mp4"])
root.mainloop()
页:
[1]