2017-06-29 33 views
1

私はPythonとTkinterを使ってゲームを作成していますが、私はそれぞれtkinter.Frameオブジェクトである異なる "スクリーン"(メインメニューとレベルエディタ)を持っていて、メインのクラス定義メニュー画面(ScreenMainMenu)の__init__の11行目で、「メインメニュー」の幅、高さ、および背景色を変更するためにself.config()を使用しようとしていますtkinter.Frame。しかし、私はこのコードを実行すると、背景はまだ灰色です。私は何かが分からないことを推測しています(私はまだTkinterとクラスにはかなり新しいです)。どんな助けでも大歓迎です - ありがとう。TkinterのFrameウィジェットの背景色を変更できません。

import tkinter as tk 

WIDTH = {"MainMenu": 600, "Editor": 450} 
HEIGHT = {"MainMenu": 500, "Editor": 501} 

class ScreenMainMenu(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
    tk.Frame.__init__(self, parent, *args, **kwargs) 
    parent.parent.geometry("{}x{}".format(WIDTH["MainMenu"], HEIGHT["MainMenu"])) 
    parent.config(width=WIDTH["MainMenu"], height=HEIGHT["MainMenu"]) 
    self.config(width=WIDTH["MainMenu"], height=HEIGHT["MainMenu"], background="red") 
    self.grid() 
    self.create_widgets() 

    def create_widgets(self): 
    # self.logo = tk.Label(self, image=r"res\logo.png") 
    self.logo = tk.Label(self, text="Build The Galaxy") 
    self.button_new_game = tk.Button(self, text="New Game") 
    self.button_load_game = tk.Button(self, text="Load Game") 
    self.button_editor = tk.Button(self, text="Editor") 
    self.button_exit = tk.Button(self, text="Exit") 

    self.logo.grid(sticky="EW") 
    self.button_new_game.grid(row=1, sticky="EW") 
    self.button_load_game.grid(row=2, sticky="EW") 
    self.button_editor.grid(row=3, sticky="EW") 
    self.button_exit.grid(row=4, sticky="EW") 

class ScreenEditor(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
    tk.Frame.__init__(self, parent, *args, **kwargs) 
    self.grid() 
    parent.parent.geometry("{}x{}".format(WIDTH["Editor"], HEIGHT["Editor"])) 

class MainApplication(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
    tk.Frame.__init__(self, parent, *args, **kwargs) 
    self.parent = parent 
    self.grid() 
    self.screen_open_main_menu() 

    def screen_open_main_menu(self): 
    self.screen_mainmenu = ScreenMainMenu(self) 

    def screen_open_editor(self): 
    self.screen_editor = ScreenEditor(self) 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.resizable(False, False) 
    root.title("Build The Galaxy") 
    main_app = MainApplication(root) 
    root.mainloop() 

答えて

0

Tkinterでは、通常、すべてのウィジェットは内容に合わせてサイズを調整します。つまり、あなたのフレームは実際には赤色(または何でも)で、内容に合っています。 (あなたがself.create_widgets()メソッドをコメントアウトすることを確認することができます。)あなたは、パラメータとして0を渡し、.grid_propagate()メソッドでサイズを強制することができます

class ScreenMainMenu(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
    tk.Frame.__init__(self, parent, *args, **kwargs) 
    parent.parent.geometry("{}x{}".format(WIDTH["MainMenu"], HEIGHT["MainMenu"])) 
    parent.config(width=WIDTH["MainMenu"], height=HEIGHT["MainMenu"]) 
    self.config(width=WIDTH["MainMenu"], height=HEIGHT["MainMenu"], background="red") 
    self.grid() 
    self.create_widgets() 
    self.grid_propagate(0) # force the widget to a certain size 

をところで、あなたは)(スーパーを使用することができます親を初期化する:

super().__init__(parent) # yes, without self! 
関連する問題