当前位置: 首页 > 知识库问答 >
问题:

无法更改Tkinter中框架小部件的背景色?

郑景胜
2023-03-14

我正在使用Python和Tkinter来创建一个游戏,我正在尝试使用不同的“屏幕”(主菜单和到目前为止的关卡编辑器),每个屏幕都是Tkinter。Frame对象,在主菜单屏幕(ScreenMainMenu)的类定义中,在第11行的\uuuu init\uuuuuu中,我试图使用self。config()以更改“主菜单”的宽度、高度和背景色。帧。但当我运行这段代码时,背景仍然是灰色的。我猜我错过了一些明显的东西(我对Tkinter和类还是相当陌生)。任何帮助都将不胜感激——谢谢。

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

共有1个答案

钮善
2023-03-14

在Tkinter中,通常所有小部件都会调整它们的大小以适应内容。这意味着,你的框架实际上是红色的(或者其他什么),它只是适合它的内容。(你可以在注释self.create_widgets()方法时检查它。)你可以用.grid_propagate()方法强制大小,传递一个0作为参数

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()初始化父级:

super().__init__(parent)  # yes, without self!
 类似资料:
  • 问题: 如何更改UIkit图标的颜色?具体来说,我想更改复选框图标的背景颜色。 这里是指向UIkit表单文档的链接。 我想改变背景的颜色。

  • 我对PhpStorm很陌生。我加入了一个团队,开始开发一个新功能,但是发现我的文件的一部分现在没有了PHP通常显示的不同颜色。它有一个背景,我把它去掉了,但是文本是白色的(而不是橙色、黄色等)。).我不知道我做了什么,也不知道为什么只有文件的一部分是这样的,而其他部分是好的,但是任何帮助都是值得感谢的。 该文件是PHP,其中包含一些HTML。除了这一部分,其他所有内容都有正确的背景和正确的颜色。

  • 我无法让JPanel改变颜色。我也不能让JFrame改变颜色。我在网上查过...我还有一个程序,它有几乎相同的代码来设置JPanel和JFrame。我就是不能让它起作用。 下面是我的主要方法: 编辑:稍后在我的主要方法中有 下面是JPanel的构造函数: 背景颜色保持默认灰色。

  • 问题内容: 我有一个框,当单击框并显示所有选项时,我正在尝试更改选项的背景色。 HTML: CSS: 问题答案: 你需要把对标签,而不是标签… 如果要为每个标签设置样式,请使用css 选择器:

  • 为什么改变java.awt.canvas的背景颜色就改变了整个框架的背景? 这可能是问题所在吗(我在Ubuntu上运行这个)? 还是我在这里遗漏了什么?

  • 问题内容: 我有一个Swing JButton,我的项目也使用了以下代码: 现在,当尝试使用一个按钮更改背景时,它不会变成红色,只有边框变成红色。 在仍用于其余组件/项目时,如何将背景变为红色? 问题答案: 看一下错误4880747:XP L&F:REGRESSION:JButton上的setBackground设置Windows XP中的边框颜色 。评估部分指出: 更改按钮的外观总是会导致与当前