以下是代码:
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()
结果如下:
它仍然是居中对齐的(默认设置)。
我正在使用python 3.4并在osx和ubuntu 14.04上测试过这个,顺便说一句。
答案 0 :(得分:5)
您遇到的第一个问题是justify
仅影响具有多行文字的标签。您要使用的选项是justify
,而不是anchor
。title_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}}