-1

Tkinter でテーブルを予約するためのフォームを作成しています。Button に境界線の色を追加したかったので、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)
4

1 に答える 1

0

Place Manager を使用する場合、座標系はオブジェクトが配置されているコンテナに関連していることを知っておくことが重要です。

フレームb_sel_date_borderTkコンテナ内にあるため、座標はウィンドウの左上隅に関連してい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ます。

以下は、オブジェクト宣言からデータ宣言を分離することにより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 に答える