簡體   English   中英

框架在Tkinter中是否有單獨的框架位置?

[英]Do Frames Have Separate Frame Positions In Tkinter?

我遇到了一個問題,我以為我知道答案了。 很奇怪,我做了一個框架來放入條目和按鈕,這樣它們就不會由於我制作的盒子而相距太遠。 但是條目和按鈕不在框架中,因為框架的背景是紅色的,但是在任何地方都沒有紅色,並且條目/按鈕仍然很奇怪地分開。

編碼:

# Hex GUI
import re
import tkinter as tk

hexa_checker_regex = re.compile(r'^#')


class Window:


    def __init__(self, master, error_checker):
        self.error_checker = error_checker
        self.master = master
        self.master.configure(bg='LightBlue')
        self.set_up()


    def set_up(self):

        # =====FRAME FOR ENTRYS + BUTTONS=====

        self.enter_frame = tk.Frame(self.master, bg='Red').grid(row=0, column=2, sticky='n')

        # =====COLOR BOX=====

        self.color = tk.Frame(self.master, highlightbackground='Black', height=100, width=100, highlightthickness=5)
        self.color.grid(row=0, column=0)

        # =====SEPERATOR=====

        tk.Frame(self.master, width=200, bg='LightBlue').grid(row=0, column=1)


        # =====HEXADECIMAL COLORS=====

        tk.Label(self.enter_frame, text='Hex:', bg='LightBlue').grid(row=0, column=2, sticky='n')

        self.the_color_hex = tk.Entry(self.enter_frame, width=50)
        self.the_color_hex.grid(row=0, column=3, sticky='n')

        tk.Button(self.enter_frame, text='Change Color', command=self.change_color_hex).grid(row=0, column=4, sticky='n')

        # =====HEX ERROR=====

        tk.Label(self.enter_frame, textvariable=self.error_checker, bg='LightBlue').grid(row=1, column=2, columnspan=2, sticky='n')

        # =====REGULAR COLORS===== <--- UNFINISHED RAN INTO ERROR FIRST

        tk.Label(self.enter_frame, text='Color:', bg='LightBlue').grid(row=2, column=2, sticky='n')

        self.reg_color = tk.Entry(self.enter_frame, width=50)
        self.reg_color.grid(row=2, column=3, sticky='n')



    def change_color_hex(self):
        if hexa_checker_regex.search(self.the_color_hex.get()) is None:
            self.error_checker.set('That is an invalid hexadecimal value!')
        else:
            try:
                self.color.configure(bg=self.the_color.get())
                self.error_checker.set('')
            except:
                self.error_checker.set('That is an invalid hexadecimal value!')
        self.the_color_hex.delete(0, 'end')



root = tk.Tk()
error_checker = tk.StringVar()
app = Window(root, error_checker)
root.mainloop()

看起來像

因此,為什么條目和按鈕不在框架中。 另外,如果條目和按鈕在框中,為什么它們的位置也會受到框的影響(不是因為框的背景是紅色的)?

問題是這條線

self.enter_frame = tk.Frame(self.master, bg='Red').grid(row=0, column=2, sticky='n')

self.enter_frame等於“ None”,因此tkinter不能使用它放置其他小部件。 更改為

 self.enter_frame = tk.Frame(self.master, bg='Red')
 self.enter_frame.grid(row=0, column=2, sticky='n')

並且您的一些問題將消失。

另一個錯誤是這條線

self.color.configure(bg=self.the_color.get())

它應該是

self.color.configure(bg=self.the_color_hex.get())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM