-1

我正在创建一个用于在 Tkinter 中预订餐桌的表格。我想为按钮添加边框颜色,所以我创建了一个框架并将按钮放置在框架内。但是在制作框架并将按钮放在框架内之后,按钮消失了,我只能看到所需颜色的单个像素代替框架。

b_sel_date_border=Frame(x)
b_sel_date_border["highlightthickness"]=5
b_sel_date_border["highlightbackground"]="#00f3b2"
b_sel_date_border["bd"]=0
b_sel_date_border["padx"]=50
b_sel_date_border["pady"]=50

b_sel_date=Button(b_sel_date_border)
b_sel_date["text"]="Select date"
b_sel_date["bg"]="#310054"
b_sel_date["fg"]="#00f3b2"
b_sel_date["bd"]=0
b_sel_date["font"]=("Arial",12,"bold")
b_sel_date["activebackground"]="#310054"
b_sel_date["activeforeground"]="#00f3b2"
b_sel_date.place(x=500,y=380)
b_sel_date_border.place(x=500,y=380)
4

1 回答 1

0

使用场所管理器时,重要的是要知道坐标系与放置对象的容器相关。

框架b_sel_date_border在容器中,因此坐标与窗口Tk的左上角相关。x

所以b_sel_date_border.place(x = 0, y = 0, width = 200, height = 150)将框架放在左上角x

按钮b_sel_date在 frame 中b_sel_date_border,所以它的坐标参考 frame 的左上角b_sel_date_border

所以设置b_sel_dateasb_sel_date.place(x = 0, y = 0)会将框架放置在b_sel_date_border.

这是通过将数据声明与对象声明分开来定义Frame和属性的更方便的方法。Button

这使得阅读和调试变得更加容易。

import tkinter as tk

frame = dict(
    highlightthickness = 5, highlightbackground = "#00f3b2",
    bd = 0, padx = 50, pady = 50)

button = dict(
    text = "Select date", bg = "#310054", fg = "#00f3b2",
    bd = 0, font = "Arial 12 bold", activebackground = "#310054",
    activeforeground = "#00f3b2")

x = tk.Tk()

b_sel_date_border = tk.Frame( x, **frame)
b_sel_date_border.place(x = 0, y = 0, width = 200, height = 150)

b_sel_date = tk.Button(b_sel_date_border, **button)
b_sel_date.place(x = 0, y = 0)

x.geometry("201x151")
x.mainloop()
于 2021-09-14T14:37:13.320 回答