การแทรกการเลือก ComboBox ลงในกล่องข้อความ - ComboBox และกล่องข้อความอยู่ในวิธีที่แยกกัน

ด้านล่างนี้เป็นโค้ดขนาดเล็กของฉัน ฉันประสบปัญหาในการแทรกตัวเลือกที่เลือกของ Combobox (real_optn) ลงในกล่องข้อความ ฉันไม่สามารถพิมพ์ตัวเลือกได้ทุกที่นอกเหนือจากวิธีการผูกเอง (display_option) ข้อผิดพลาดที่ฉันได้รับคือ "วัตถุ 'ตัวอย่าง' ไม่มีแอตทริบิวต์ 'real_optn'" ในการทดลองครั้งหนึ่งของฉัน ฉันใช้ self.display_option(name) ในการผูกแทนที่จะเป็น self.display_option สิ่งนี้ทำให้แทรกเข้าไปได้ แต่อย่างที่คาดไว้ การเลือกไม่ได้อัปเดต ฉันได้อ่าน รับค่าที่เลือกจาก combobox ใน 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