Python: изменение цвета корня кадра.настройка (фон=’красный’) не работает

Я делаю многооконный GUI в tkinter, и я хочу изменить фоновый цвет gui. Я пробовал несколько предложенных решений, и они не работают. Например root.настройка (background=’red’). Это также не работает: http://www.java2s.com/Code/Python/GUI-Tk/SetFramebackgroundcolor.htm

import tkinter as tk
from tkinter import *
from tkinter import ttk

LARGE_FONT = ("Verdana", 12)

def loadmsg(msg):
    popupload.fileName = filedialog.askopenfilename(filetypes=(("textfiler", ".txt"), ("Alla filer", ".*")))


class Dod(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.wm_title(self, "GUi")
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()



class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        ttk.Frame.__init__(self, parent)
        label = ttk.Label(self, text="GUI", font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        button = ttk.Button(self, text="Visit Page One",
                            command=lambda: controller.show_frame(PageOne))


        button2 = ttk.Button(self, text="Ok",
                             command=lambda: controller.label2)

        button.pack()
        button2.pack()


class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = ttk.Label(self, text="Page One", font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        button1 = ttk.Button(self, text="Back to Home",
                             command=lambda: controller.show_frame(StartPage))

        button1.pack()

root = Dod()
root.geometry("800x400")
root.mainloop()

1 ответ

  1. Это очень просто.

    Все, что вам нужно сделать, это добавить контейнер.аргумент config () в функции init класса Dod(tk.Tk) после контейнера аргумента.grid_columnconfigure (0, вес=1). Затем добавьте кадр.config (bg=»черный») после self.frames[F]=рамка внутри цикла для F in (start1,start,P1,P2).[Это придаст черный цвет всем кадрам в цикле]
    Код выглядит следующим образом:

    import tkinter as tk
    from tkinter import *
    from tkinter import ttk
    
    LARGE_FONT = ("Verdana", 12)
    
    def loadmsg(msg):
        popupload.fileName = filedialog.askopenfilename(filetypes=(("textfiler",    ".txt"), ("Alla filer", ".*")))
    
    
    class Dod(tk.Tk):
        def __init__(self, *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
            tk.Tk.wm_title(self, "GUi")
            container = tk.Frame(self)
            container.pack(side="top", fill="both", expand=True)
            container.grid_rowconfigure(0, weight=1)
            container.grid_columnconfigure(0, weight=1)
            F1.config()
    
            self.frames = {}
            for F in (StartPage, PageOne):
                frame = F(container, self)
                self.frames[F] = frame
                frame.config(bg="black")
                frame.grid(row=0, column=0, sticky="nsew")
    
            self.show_frame(StartPage)
    
        def show_frame(self, cont):
            frame = self.frames[cont]
            frame.tkraise()
    
    
    
    class StartPage(tk.Frame):
        def __init__(self, parent, controller):
            ttk.Frame.__init__(self, parent)
            label = ttk.Label(self, text="GUI", font=LARGE_FONT)
            label.pack(pady=10, padx=10)
            button = ttk.Button(self, text="Visit Page One",
                            command=lambda: controller.show_frame(PageOne))
    
    
            button2 = ttk.Button(self, text="Ok",
                             command=lambda: controller.label2)
    
            button.pack()
            button2.pack()
    
    
    class PageOne(tk.Frame):
        def __init__(self, parent, controller):
            tk.Frame.__init__(self, parent)
            label = ttk.Label(self, text="Page One", font=LARGE_FONT)
            label.pack(pady=10, padx=10)
            button1 = ttk.Button(self, text="Back to Home",
                             command=lambda: controller.show_frame(StartPage))
    
            button1.pack()
    
    root = Dod()
    root.geometry("800x400")
    root.mainloop()