Tkinter配置错误

时间:2019-04-30 10:18:08

标签: python-3.x tkinter

使用配置时,Tkinter返回错误。例如,我使框架上的按钮具有bg =“ black”,它将引发错误。

_tkinter.TclError:未知选项“ -bg”

我尝试同时使用两者

b = Button(self.menuFrame, Text="Test", bg="black")

b.config(bg="black")

两者都抛出相同的错误。

class Run(Frame):
    def __init__(self, master):
        super(Run, self).__init__(master)

        # | Variables |
        self.cur_frame = 0
        self.t = ""

        # | Frames |
        self.frames = []
        for i in range(2):
            self.frames.append(i)
        self.frames[0] = self.loadFrame = Frame(self)
        self.frames[1] = self.mainFrame = Frame(self)

        # | Widgets |
        self.load_widgets()
        self.menu_widgets()

        # | Main |
        self.grid()
        self.frames[1].grid()

    def go_frame(self, frame):
        if frame != self.cur_frame:
            self.frames[self.cur_frame].grid_remove()
            self.frames[frame].grid()
            self.cur_frame = frame

    def load_widgets(self):
        pass

    def menu_widgets(self):
        self.t = Text(self.frames[1], width=63, height=37, bg='#847676', state=DISABLED)
        self.t.grid(row=0, column=1, rowspan=6, sticky="nsew")

        b_start = Button(self.frames[1], text='Start', command=lambda: self.daily())
        b_stop = Button(self.frames[1], text='Stop', command=lambda: self.stop())
        b_run1 = Button(self.frames[1], text='Run Exp', command=lambda: self.run(1))
        b_run2 = Button(self.frames[1], text='Run Scan', command=lambda: self.run(4))
        b_run3 = Button(self.frames[1], text='Run Inc', command=lambda: self.run(7))
        b_config = Button(self.frames[1], text='Config', command=lambda: self.go_frame(0))
        s_bar = Scrollbar(self.frames[1], command=self.t.yview)
        s_bar.config(bg="#403939")

        b_start.grid(row=0, column=0)
        b_stop.grid(row=1, column=0)
        b_run1.grid(row=2, column=0)
        b_run2.grid(row=3, column=0)
        b_run3.grid(row=4, column=0)
        b_config.grid(row=5, column=0)
        s_bar.grid(row=0, column=2, sticky='nsew', rowspan=6)
        self.t['yscrollcommand'] = s_bar.set

app = Tk()
app.config(bg='#403939')

w = 600
h = 600
ws = app.winfo_screenwidth()
hs = app.winfo_screenheight()

x = int((ws/2) - (w/2))
y = int((hs/2) - (h/2))

app.geometry()
app.geometry(f'{w}x{h}+{x}+{y}')

Run(app)
app.mainloop()

我希望这会使滚动条具有我在python 3.4之前使用过的此方法设置的颜色。目前在python 3.7上运行,它给我tk小部件上的配置错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如评论中所述,您的导入看起来像这样

from tkinter import *
from tkinter.messagebox import *
from tkinter.ttk import *

tkinterttk都有一个Button类,并且由于您使用通配符导入(*),因此它们都应作为Button导入。由于两个不同的对象不能具有相同的名称,因此ttk Button会覆盖tkinter Button,因为它是稍后导入的。

因此,当您执行b = Button(...)时,不是在使用tkinter版本,而是在ttk的{​​{1}}版本中使用,因为错误提示该版本没有Button选项。

为避免此类混乱,请避免导入通配符。而是将您的进口商品设为

bg

然后可以使用import tkinter as tk from tkinter import messagebox from tkinter import ttk 之类的tkinter Buttonb = tk.Button(...)之类的ttk按钮


P.S。如果您想使用b = ttk.Button(...) ttkuse ttk.Style() to change its appearance