Сетка Tkinter сбрасывает цвет фона - PullRequest
0 голосов
/ 15 октября 2018

Итак, я начинаю с tkinter, и есть проблема, которую я не могу решить, когда я использую сетку, чтобы определить, где я хочу, чтобы мои вещи были, каждая ячейка в сетке не будет иметь желаемого цвета фона.

Лучше показать, чем объяснить слишком много:

import tkinter as tk
from tkinter import ttk

LARGE_FONT = ("arial", 20)

class Main(tk.Tk):
    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        #self.grid_rowconfigure(0, weight=1) 
        #self.grid_columnconfigure(0, weight=1)
        self.configure(background='black')

        main_container = tk.Frame(self)
        main_container.grid(column=0, row=0, sticky = "nsew")
        main_container.grid_rowconfigure(0, weight = 1)
        main_container.grid_columnconfigure(0, weight = 1)

        main_container.configure(background="black")

        menu_bar = tk.Menu(main_container)
        file_menu = tk.Menu(menu_bar, tearoff = 0) 
        file_menu.add_command(label = "Save settings", command = lambda: popupmsg("Not supported yet!"))
        file_menu.add_separator()
        file_menu.add_command(label = "Exit", command = quit)
        menu_bar.add_cascade(label = "File", menu = file_menu)

        tk.Tk.config(self, menu = menu_bar)

        self.frames = {}

        for fr in (MainPage,):
            frame = fr(main_container, self)
            self.frames[fr] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")
        self.show_frame(MainPage)

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

class MainPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        self.columnconfigure(0, weight = 1)
        self.columnconfigure(1, weight = 1)
        self.rowconfigure(0, weight = 1)
        self.rowconfigure(1, weight = 1)

        label = tk.Label(self, text = "Main Page", fg = "white", bg="black", font = LARGE_FONT)
        label.grid(row = 0, column = 0, padx = 10, pady = 10)

        label2 = tk.Label(self, text = "Main Page2", fg = "white", bg="black", font = ("Arial",8))
        label2.grid(row = 1, column = 0, padx = 10, pady = 10, sticky = 'ne')

        button2 = ttk.Button(self, text = "Page 2", command = lambda: controller.show_frame(Page2))
        button2.grid(row = 0, column = 1, sticky = 'nswe')

        button3 = ttk.Button(self, text = "Exit", command = quit)
        button3.grid(row = 1, column = 1, sticky = 'nswe')

app = Main()
app.geometry("1280x720")
app.mainloop()

Итак, как вы можете видеть, отсюда: screen

Фон внутри сетки сброшени я добавил модификаторы фона везде, где мог, я все еще не могу заставить его работать

PS: я знаю, что я должен раскомментировать 2 строки в начале, чтобы он работал так, как я хочу, но это просто, чтобы показать, чтофон рамки работает, но сетка почему-то не одинакова

Заранее спасибо, Shraneid

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Фон внутри сетки сброшен, и я везде добавил модификаторы фона, я все еще не могу заставить его работать

Фон не сбрасывается.Рамка содержит свой собственный цвет фона, поэтому вы должны указать своему классу MainPage (он же рамка), какого цвета вы хотите, чтобы он был.

class MainPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        # Add this line here
        self.configure(background='black')
0 голосов
/ 15 октября 2018

Невозможно для grid изменить цвет чего-либо.grid не является «вещью» и не имеет цвета или меняет цвет чего-либо.Если вы хотите, чтобы фон MainPage был черным, вам нужно установить его на черный.

Если вы хотите, чтобы он был жестко запрограммирован, просто добавьте его при вызове метода __init__ суперкласса:

class MainPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, background="black")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...