Почему мой .current не устанавливает значение по умолчанию для выпадающего списка, даже если я использовал класс для инициализации? - PullRequest
0 голосов
/ 24 июня 2019

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

Проблема в том, что вместо полей ничего не отображаетсяостаются пробелы

Я попытался установить textvariable=var.get(), но это не позволяет комбобоксу изменять значения и собирать данные пользователей.

Я также пытался использовать класс:

class Application:

    def __init__(self, parent, vars, pos_x, pos_y, to_test, width):
        self.parent = parent
        self.vars = vars
        self.pos_x = pos_x
        self.pos_y = pos_y
        self.to_test = to_test
        self.width = width
        self.combo()

    def combo(self):
        self.box_value = tk.StringVar()
        self.box = ttk.Combobox(self.parent, width=self.width, 
                                textvariable=self.box_value)
        self.box['values'] = self.vars
        for i in range(len(self.vars)):
            if not self.to_test == 'None':
                if self.vars[i] == self.to_test:
                    self.box.current(i)
        self.box.place(x=self.pos_x, y=self.pos_y)

#I have the function edit_tree called in a button of a previous window win
#The tree is the tree view displayed in the previous window
def edit_tree(win, tree):
    selected = tree.selection()
    edit_vendor_window = tk.Toplevel(win)
    edit_vendor_window.geometry('600x570')
    tk.Label(edit_vendor_window, text='Report Date:').place(x=10, y=10)

    vars = ('2018', '2019')
    Application(edit_vendor_window, vars, 150, 10, tree.item(selected, 
                'values)[0], 5)

Я видел в некоторых других ответах, что проблема в том, что StringVar собирает мусор, и решение состоит в том, чтобы использовать класс.Но это не работает для меня.Эти вещи просто сводили меня с ума.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 24 июня 2019

Ваши self.vars[i] и self.to_test могут не относиться к одному и тому же типу, поэтому ваш цикл for никогда не достигнет части сравнения.Попробуйте привести оба к Str, а также удалить параметр textvariable в вашем Combobox.

def combo(self):
    self.box = ttk.Combobox(self.parent, width=self.width)
    self.box['values'] = self.vars
    for i in range(len(self.vars)):
        if not self.to_test == 'None':
            if str(self.vars[i]) == str(self.to_test):
                self.box.current(i)
    self.box.place(x=self.pos_x, y=self.pos_y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...