【问题标题】:Only a single pixel visible in place of a Frame in Tkinter在 Tkinter 中,只有一个像素可以代替 Frame
【发布时间】:2021-09-14 14:00:21
【问题描述】:

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

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)

【问题讨论】:

  • 如果您学会使用 .pack().grid() 几何管理器,您会发现 Tkinter 非常 更易于使用。它们为您做了很多事情,如果您使用 .place(),您必须手动完成。

标签: python tkinter tkinter-button


【解决方案1】:

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

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

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

按钮b_sel_date 在框架b_sel_date_border 中,因此它的坐标参考框架b_sel_date_border 的左上角。

因此将b_sel_date 设置为b_sel_date.place(x = 0, y = 0) 会将框架放置在b_sel_date_border 的左上角。

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

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

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2021-10-30
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多