首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两栏中设置tkinter消息框中文本的格式

在两栏中设置tkinter消息框中文本的格式
EN

Stack Overflow用户
提问于 2021-03-11 23:37:36
回答 2查看 161关注 0票数 3

通常,我在控制台中使用固定长度的字符格式化文本。现在我想在tkinter消息框中做一些类似的事情,但这会弄乱缩进。举个例子

代码语言:javascript
复制
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)),
    )

结果:

而在控制台中,它将是:

代码语言:javascript
复制
Everything          :first one
should be           :second one
evenly outlined     :another one
ms are really long  :previous to the last
mmmmmmmmmmmmmmm     :you see?

这就是我想在信箱里看到的。

EN

回答 2

Stack Overflow用户

发布于 2021-03-12 00:00:58

由于操作系统级别的限制,我认为使用普通的MessageBox是不可能的。但是,您可以通过将justify设置为tkinter.LEFT在标签中执行此操作。

下面是一些示例代码:

代码语言:javascript
复制
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,但希望这能提供一些帮助。祝好运!

编辑:

我还使用了等宽字体,这很可能是为了确保文本始终具有一致的宽度所必需的。

票数 1
EN

Stack Overflow用户

发布于 2021-03-12 00:47:47

您可以使用simpledialog模块并自己构建一个。

代码语言:javascript
复制
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类进行以下更改,使其看起来更接近本机类。

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66585702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档