Ошибки Tkinter Config - PullRequest
       1

Ошибки Tkinter Config

0 голосов
/ 30 апреля 2019

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

Я ожидаю, что это сделает полосу прокрутки цветом, который я установил как Iиспользовал этот метод ранее в Python 3.4.В настоящее время работает на Python 3.7, и это дает мне ошибки для конфигурации на виджеты TK.Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 30 апреля 2019

Как уже упоминалось в комментариях, ваш импорт выглядит следующим образом

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

И tkinter, и ttk имеют класс Button, и поскольку вы используете импорт с подстановочными знаками (*), они оба должны быть импортированы как Button. Поскольку два разных объекта не могут иметь одно и то же имя, ttk Button перезаписывает tkinter Button, поскольку он импортируется позже.

Поэтому, когда вы делаете b = Button(...), вы используете не версию tkinter, а версию ttk Button, которая, как говорится в сообщении об ошибке, не имеет опции bg.

Чтобы избежать подобных недоразумений, избегайте импорта по шаблону. Вместо этого имейте свой импорт как

import tkinter as tk
from tkinter import messagebox
from tkinter import ttk

Затем можно использовать tkinter Button, например, b = tk.Button(...), и кнопку ttk, например, b = ttk.Button(...)

.

P.S. Если вы do хотите использовать ttk Button, , используйте ttk.Style(), чтобы изменить его внешний вид .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...