tkinter标签不尊重合理选项?

时间:2014-11-12 20:37:25

标签: python tkinter tk

以下是代码:

from tkinter import *

class PopupTk(Frame):
    def __init__(self, master=None, title="Notification", msg="New information", duration=2):
        Frame.__init__(self, master)
        self.duration = duration
        close_button = Button(self, text="C", command=self.master.destroy)
        close_button.pack(side=LEFT)
        title_label = Label(self, text=title)
        title_label.config(justify=LEFT)
        title_label.pack()
        msg_label = Label(self, text=msg)
        msg_label.config(justify=LEFT)
        msg_label.pack()
        self.pack(side=TOP, fill=BOTH, expand=YES, padx=10, pady=10)

        # get screen width and height
        ws = self.master.winfo_screenwidth()
        hs = self.master.winfo_screenheight()
        w = 300
        h = 100
        # calculate position x, y
        x = ws - w
        y = hs - h
        self.master.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.master.overrideredirect(True)
        self.master.lift()

    def auto_close(self):
        msec_until_close = self.duration * 1000
        self.master.after(msec_until_close, self.master.destroy)


if __name__ == '__main__':
    root = Tk()

    sp = PopupTk(root, duration=3)
    sp.auto_close()
    root.call('wm', 'attributes', '.', '-topmost', True)
    root.mainloop()

结果如下:

enter image description here

它仍然是居中对齐的(默认设置)。

我正在使用python 3.4并在osx和ubuntu 14.04上测试过这个,顺便说一句。

1 个答案:

答案 0 :(得分:5)

您遇到的第一个问题是justify仅影响具有多行文字的标签。您要使用的选项是justify,而不是anchortitle_label.config(borderwidth=1, relief="solid") ... msg_label.config(borderwidth=1, relief="solid") 。但是,这不是你唯一的问题。

以下是开始调试此类问题的简单方法:在小部件周围添加临时边框。这使您可以看到边界的位置,从而可以可视化它是居中的文本,还是居中(或两者)的窗口小部件

anchor

这样做,显而易见的是,问题不是文本在窗口小部件中没有左对齐,而是窗口小部件在框架的部分中居中。< / p>

快速修复可能是在打包小部件时使用title_label.pack(side="top", anchor="w") msg_label.pack(side="top", anchor="w") 属性。这将迫使小部件到它所分配的包裹的左侧。

{{1}}