如何在tkinter框架中添加阴影?

时间:2017-03-12 17:47:20

标签: python python-3.x tkinter

我正在尝试使用tkinter创建一个材质设计风格的GUI,就像这样(取自LOOT mod organizer thingy):

enter image description here

目前,我有一个框架作为灰色背景和另一个白色框架将保留我的内容,我的目的是为这个白色框架添加一个阴影,因为没有标准的浮雕选项接近。这可能吗?

到目前为止,我已经尝试将我的白色框架放在带有阴影图像的画布中,但我无法在任何接近我想要的位置放置图像或调整尺寸。

有趣的是,OptionMenu窗口小部件的下拉确实有一个阴影:

enter image description here

虽然我不确定这是由于tkinter还是因为Windows

1 个答案:

答案 0 :(得分:1)

我在打包小部件时利用了padxpady选项创建了一个解决方案。效果并不完全是您所说的,但您可能想尝试其他选项组合。

import tkinter as tk


class MDLabel(tk.Frame):

    def __init__(self, parent=None, **options):
        tk.Frame.__init__(self, parent, bg=options["sc"])  # sc = shadow color
        self.label = tk.Label(self, text=options["text"], padx=15, pady=10)
        self.label.pack(expand=1, fill="both", padx=(0, options["si"]), pady=(0, options["si"]))  # shadow intensity


root = tk.Tk()
root.geometry("600x300+900+200")

main_frame = tk.Frame(root, bg="white")
body_frame = tk.Frame(main_frame)

for i in range(3):
    md_label = MDLabel(body_frame, sc="grey", si=1, text="Label " + str(i))
    md_label.pack(expand=1, fill="both", pady=5)

body_frame.pack(expand=1, fill="both", pady=5, padx=5)
main_frame.pack(expand=True, fill="both")

root.mainloop()

这就是结果(在Mac OS X,Sierra上):

enter image description here