dragov 发表于 2025-8-16 10:55:33

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 控件的宽度一样大小 !

FishC 发表于 2025-8-16 10:57:37

在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 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-8-16 12:31:57

试试

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()

dragov 发表于 2025-8-16 13:04:15

某一个“天” 发表于 2025-8-16 12:31
试试



不能固定宽度的!

某一个“天” 发表于 2025-8-16 13:38:23


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()

ydwb 发表于 2025-8-16 13:57:25

使用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()

dragov 发表于 2025-8-16 14:03:01

ydwb 发表于 2025-8-16 13:57
使用Label替代Message,设置固定宽度(像素单位)
from tkinter import *






使 用 Label 是 可 以 的 ,现 在 是 要 使 用 Message 啊 !

dragov 发表于 2025-8-16 14:05:09

某一个“天” 发表于 2025-8-16 13:38




不 行 啊 !

某一个“天” 发表于 2025-8-16 15:03:15

你既然用message 就应该创一个msg 变量
然后加换行和新内容

某一个“天” 发表于 2025-8-16 15:03:46

要不然还不如Label

dragov 发表于 2025-8-16 15:19:04

某一个“天” 发表于 2025-8-16 15:03
要不然还不如Label



Label 很容易就做到了,对于 Message 我再想一想!

ydwb 发表于 2025-8-16 16:15:53

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]
查看完整版本: Tkinter Message控件的宽度需要一致?