Вставка выбора ComboBox в текстовое поле — ComboBox и текстовое поле находятся внутри отдельных методов

Ниже приведена миниатюра моего кода. У меня возникли проблемы со вставкой выбранного параметра Combobox (real_optn) в текстовое поле. Я даже не мог распечатать опцию нигде, кроме самого метода привязки (display_option). Я продолжал получать сообщение об ошибке: «Объект Sample не имеет атрибута real_optn». В одном из своих испытаний я использовал в привязке self.display_option(name), а не self.display_option. Это заставило его вставить, но, как и следовало ожидать, выбор не обновлялся. Я прочитал Получение выбранного значения из поля со списком в Tkinter, Простая демонстрация ttk ComboBox и множество других связанных запросов но не ответил на мой запрос. Ваши подсказки ценятся!

from tkinter import*
from tkinter import ttk

class Sample:    

    def __init__(self, master,title):
        frame.title(title)
        frame.geometry('1100x500')

    def combo_menu(self,page,name,options):
        self.variable = StringVar()
        self.name = ttk.Combobox(page,values=options)
        self.name.bind("<<ComboboxSelected>>", self.display_option) 
        current = self.name.current(0)
        self.name.pack()

    def display_option(self,event): 
        optn=self.name.get()
        mapping_dic = {
        "1": "A",
        "2": "B",
        "3": "C"
        }
        self.real_optn = mapping_dic.get(optn,"A")
        print(self.real_optn) 

    def output(self,page):
        OutputBox=Text(page)
        OutputBox.pack()
        OutputBox.delete("1.0", "end")
        OutputBox.insert(END, self.real_optn)

frame = Tk()
pop = Sample(frame, "Sample")
pop.combo_menu(frame,"first",[1,2,3,4])
pop.output(frame)

frame.mainloop()

person Adebayo    schedule 10.09.2018    source источник


Ответы (1)


Вы вызываете pop.putput(frame) до того, как окно станет видимым, то есть до того, как пользователь сможет что-либо выбрать, то есть до того, как вы создадите self.real_optn.

person Bryan Oakley    schedule 10.09.2018
comment
Спасибо за внимание. Что вы предлагаете мне сделать, чтобы заставить его работать тогда? Проблема в том, что real_optn не распознается как атрибут pop, что довольно странно, учитывая, что display_option — это метод в классе. Наоборот, я понял, что это работает отлично, если я перемещаю OutputBox.delete("1.0", "end") и OutputBox.insert(END, self.real_optn) внутрь display_option. Но это не работает для моего проекта, так как пользователи могут захотеть изменить выбор. Кроме того, есть несколько других полей со списком, которые я хочу вывести в одно и то же текстовое поле после завершения выбора. - person Adebayo; 11.09.2018