私はtkinterで小さなゲームをプログラミングしていますが、簡単に言えば、行き詰っています。
odという種類の開始メニューがあり、2つのボタンと1つのラベルがあります。
フレームを作成するだけですべてがうまくいくと、サイズは500x500ピクセルになります
ボタンとラベを作成するときに背景が変わらないようにしたいのですが、何をするにしてもサイズを調整します。ここに私のコードがあります:
import tkinter as tk
def startgame():
pass
mw = tk.Tk() #Here I tried (1)
mw.title('The game')
back = tk.Frame(master=mw, width=500, height=500, bg='black')
back.pack()
go = tk.Button(master=back, text='Start Game', bg='black', fg='red',
command=lambda:startgame()).pack()
close = tk.Button(master=back, text='Quit', bg='black', fg='red',
command=lambda:quit()).pack()
info = tk.Label(master=back, text='Made by me!', bg='red',
fg='black').pack()
mw.mainloop()
私はstackoverflowを検索しましたが、何も役に立ちませんでした!私は私の質問に少し似た質問を1つだけ見つけましたが、答えはうまくいきませんでした。私はこれを試しました:
(1)mw.resizable(width = False、height = False)
何が問題なのか想像できません。本当に必死です。
pack_propagate(0)
を設定してpack_propagate
をオフにします
ここでpack_propagate
をオフにすると、フレーム内のウィジェットでサイズを制御できないようになります。したがって、幅と高さを500に設定しました。伝播静止をオフにすると、ウィジェットがフレームのサイズを変更せずにこのサイズになり、それぞれの幅/高さを埋めることができます。
ルートウィンドウのサイズ変更をオフにするには、root.resizable(0, 0)
を設定します。ここで、x
およびy
の方向でそれぞれサイズ変更が許可されます。
他の回答に記載されているように、ウィンドウにmaxsizeを設定するには、maxsize
属性またはminsize
を設定できますが、ルートウィンドウのジオメトリを設定してからサイズ変更をオフにすることもできます。もう少し柔軟な。
ウィジェットにgrid
またはpack
を設定すると、None
が返されます。したがって、ウィジェットオブジェクトへの参照を保持したい場合は、grid
またはpack
を呼び出すウィジェットに変数を設定しないでください。代わりに、変数をウィジェットWidget(master, ....)
に設定し、代わりにウィジェットでpack
またはgrid
を呼び出す必要があります。
import tkinter as tk
def startgame():
pass
mw = tk.Tk()
#If you have a large number of widgets, like it looks like you will for your
#game you can specify the attributes for all widgets simply like this.
mw.option_add("*Button.Background", "black")
mw.option_add("*Button.Foreground", "red")
mw.title('The game')
#You can set the geometry attribute to change the root windows size
mw.geometry("500x500") #You want the size of the app to be 500x500
mw.resizable(0, 0) #Don't allow resizing in the x or y direction
back = tk.Frame(master=mw,bg='black')
back.pack_propagate(0) #Don't allow the widgets inside to determine the frame's width / height
back.pack(fill=tk.BOTH, expand=1) #Expand the frame to fill the root window
#Changed variables so you don't have these set to None from .pack()
go = tk.Button(master=back, text='Start Game', command=startgame)
go.pack()
close = tk.Button(master=back, text='Quit', command=mw.destroy)
close.pack()
info = tk.Label(master=back, text='Made by me!', bg='red', fg='black')
info.pack()
mw.mainloop()
ウィンドウ全体を特定のサイズにしたい場合は、geometry
コマンドを使用して、必要なサイズをウィンドウに指定できます。それは本当にあなたがする必要があるすべてです。
例えば:
mw.geometry("500x500")
ただし、ウィンドウ内のウィジェットのサイズを適切に変更することも確認する必要があるため、これにフレームを追加する方法を変更します。
back.pack(fill="both", expand=True)
問題には2つの解決策があります。
mw.geometry('500x500')
OR
back.place(x = 0, y = 0, relwidth = 1, relheight = 1)
* back.pack()
の代わりに2番目のオプションを使用する必要があります
parent_window.maxsize(x,x);
を試して、最大サイズを設定してください。背景などを設定しても大きくなりません。
編集:parent_window.minsize(x,x)
を使用して、一定のサイズに設定します!