Метод Tkinter Trace возвращает 3 переменные, когда ожидается 0 - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать динамический графический интерфейс, который меняет свои метки в зависимости от того, какое значение выбрано в поле со списком.Я пытаюсь использовать метод .trace для достижения этой цели.Я получаю следующую ошибку с моей текущей настройкой: "area_labels принимает 0 позиционных аргументов, но 3 были заданы)

Я прикрепил соответствующие части моего кода ниже.

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



window = Tk()
window.geometry('1300x700')
window.title('Volumetric Calculator')


areastcboxv = StringVar()
areastcbox = ttk.Combobox(window, textvariable = areastcboxv, values = ('Discrete','Normal','Truncated Normal', 'Log Normal'))
areastcbox.grid(row = 1, column = 2)
areastcbox.set('Discrete')

areastcboxv.trace("w", area_labels)

def area_labels():


    if areastcboxv.get() == "Discrete":
        lvlabel = Label(text = 'Base Case Value', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 3)
        bvlabel = Label(text = 'Standard Dev', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 4)
        hvlabel = Label(text = 'High Value', fg = 'black', bg = 'white', width = 17).grid(row = 0, column = 5)
        lplabel = Label(text = 'Low Probability', fg = 'black', bg = 'white', width = 17).grid(row = 0, column = 6)
        bplabel = Label(text = 'Base Probability', fg = 'black', bg = 'white', width = 17).grid(row = 0, column = 7)
        hplabel = Label(text = 'High Probability', fg = 'black', bg = 'white', width = 17, state = DISABLED ).grid(row = 0, column = 8)

    elif areastcboxv.get() == "Normal":
        lvlabel = Label(text = 'Base Case Value', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 3)
        bvlabel = Label(text = 'Standard Dev', fg = 'black', bg = 'white', width = 17 ).grid(row = 0, column = 4)
        hvlabel = Label(text = 'High Value', fg = 'black', bg = 'white', width = 17, state = DISABLED ).grid(row = 0, column = 5)
        lplabel = Label(text = 'Low Probability', fg = 'black', bg = 'white', width = 17, state = DISABLED ).grid(row = 0, column = 6)
        bplabel = Label(text = 'Base Probability', fg = 'black', bg = 'white', width = 17, state = DISABLED ).grid(row = 0, column = 7)
        hplabel = Label(text = 'High Probability', fg = 'black', bg = 'white', width = 17, state = DISABLED ).grid(row = 0, column = 8)

    elif areastcboxv.get() == "Truncated Normal":
        pass

    elif areastcboxv.get() == "Log Normal":
        pass

window.mainloop()

1 Ответ

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

Трассировка будет содержать три аргумента.измените свою функцию на area_labels (* событие) или area_labels (a, b, c)

Ищите здесь объяснение Каковы аргументы для обратных вызовов метода трассировки переменных Tkinter?

import tkinter as tk
from tkinter import ttk

def selection(*trace_event):
    print('the trace arguments',trace_event)
    chosen['text'] = options.get()

ROOT = tk.Tk()
val = tk.StringVar()
options = ttk.Combobox(textvariable=val,
                       values=('a','b','c'))
options.grid()
val.trace('w', selection)
chosen = tk.Label(text='No selection')
chosen.grid()
ROOT.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...