web-dev-qa-db-ja.com

tkinterウィンドウを一定のサイズに設定する方法

私は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)

何が問題なのか想像できません。本当に必死です。

18
Mr. Squiddy

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

ウィンドウ全体を特定のサイズにしたい場合は、geometryコマンドを使用して、必要なサイズをウィンドウに指定できます。それは本当にあなたがする必要があるすべてです。

例えば:

mw.geometry("500x500")

ただし、ウィンドウ内のウィジェットのサイズを適切に変更することも確認する必要があるため、これにフレームを追加する方法を変更します。

back.pack(fill="both", expand=True)
6
Bryan Oakley

問題には2つの解決策があります。

  1. Tkinterウィンドウの固定サイズを設定するか、 mw.geometry('500x500')

OR

  1. フレームをウィンドウのサイズに自動的に調整します; back.place(x = 0, y = 0, relwidth = 1, relheight = 1)

* back.pack()の代わりに2番目のオプションを使用する必要があります

2
user6763977

parent_window.maxsize(x,x);を試して、最大サイズを設定してください。背景などを設定しても大きくなりません。

編集:parent_window.minsize(x,x)を使用して、一定のサイズに設定します!

1
Sid Sahay