通常,我在控制台中使用固定长度的字符格式化文本。现在我想在tkinter消息框中做一些类似的事情,但这会弄乱缩进。举个例子
from tkinter import messagebox
info = {'Everything': 'first one', 'should be': 'second one', 'evenly outlined': 'another one', 'ms are really long':'previous to the last', 'mmmmmmmmmmmmmmm': "you see?"}
infostring = (f"{k: <20}:{v}" for k, v in info.items())
messagebox.askokcancel(
title="outlining",
icon=messagebox.QUESTION,
message=("Is this your outlined well?\n\n" + "\n".join(infostring)),
)结果:

而在控制台中,它将是:
Everything :first one
should be :second one
evenly outlined :another one
ms are really long :previous to the last
mmmmmmmmmmmmmmm :you see?这就是我想在信箱里看到的。
发布于 2021-03-12 00:00:58
由于操作系统级别的限制,我认为使用普通的MessageBox是不可能的。但是,您可以通过将justify设置为tkinter.LEFT在标签中执行此操作。
下面是一些示例代码:
import tkinter
msg = """Everything :first one
should be :second one
evenly outlined :another one
ms are really long :previous to the last
mmmmmmmmmmmmmmm :you see?"""
r = tkinter.Tk()
label1 = tkinter.Label(r, text=msg, font=("Consolas", 12), justify=tkinter.LEFT)
label1.place(x=0,y=0)
r.mainloop()它输出以下内容:

我承认这不是一个确切的答案,我也不是非常精通Tkinter,但希望这能提供一些帮助。祝好运!
编辑:
我还使用了等宽字体,这很可能是为了确保文本始终具有一致的宽度所必需的。
发布于 2021-03-12 00:47:47
您可以使用simpledialog模块并自己构建一个。
from tkinter import *
from tkinter import simpledialog
class Dialog(simpledialog.Dialog):
def __init__(self,master,title=None):
root.bell()
simpledialog.Dialog.__init__(self,master,title)
def body(self,frame):
icon_label=Label(frame,image='::tk::icons::question')
icon_label.pack(side='left',anchor='n',padx=(0,10))
label=Label(frame,text="Is this your outlined well?\n\n" + "\n".join(infostring),
justify='left',font='Consolas 11')
label.pack(side='right')
return label
def dialog():
Dialog(root,title='outlining')
root=Tk()
info = {'Everything': 'first one', 'should be': 'second one', 'evenly outlined': 'another one',
'ms are really long':'previous to the last', 'mmmmmmmmmmmmmmm': "you see?"}
infostring = (f"{k: <20}:{v}" for k, v in info.items())
button=Button(root,text='Dialog',command=dialog)
button.pack(padx=100,pady=100)
root.mainloop()您还可以对Dialog类进行以下更改,使其看起来更接近本机类。
def body(self,frame):
frame.config(bg='white')
frame.master.config(bg=frame['bg'])
icon_label=Label(frame,image='::tk::icons::question',bg=frame['bg'])
icon_label.pack(side='left',anchor='n',padx=(0,10))
label=Label(frame,text="Is this your outlined well?\n\n" + "\n".join(infostring),
justify='left',font='Consolas 11',bg=frame['bg'])
label.pack(side='right')
return label
def buttonbox(self):
box = Frame(self)
w = ttk.Button(box, text="Cancel", width=10, command=self.cancel)
w.pack(side=RIGHT, padx=5, pady=5)
w = ttk.Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)
w.pack(side=RIGHT, padx=5, pady=5)
self.bind("<Return>", self.ok)
self.bind("<Escape>", self.cancel)
box.pack(fill='x')https://stackoverflow.com/questions/66585702
复制相似问题