从 tkinter 组合框获取选定值

问题描述 投票:0回答:1

我是 python 和 tkinter 的新手,我有以下问题。我正在使用 tkinter 创建用户输入界面。通过组合框选择输入变量之一。但是,我似乎无法检索选定的值并在其余代码中使用它。基本上,以下代码的最后一行不会“打印”任何内容(即选定的公司名称)。

class ResModelInput:

    def __init__(self):
        param_window = Tk()
        param_window.title("Parameters")

        ttk.Label(param_window, text="Company:", font="Calibri 12").grid(row=1, column=1, sticky=W)
        ttk.Label(param_window, text="Valuation date (dd/mm/yyyy):", font="Calibri 12").grid(row=4, column=1, sticky=W)
        # outputs
        ttk.Label(param_window, text="Valuation Year:", font="Calibri 12").grid(row=5, column=1, sticky=W)
        ttk.Label(param_window, text="Valuation Month:", font="Calibri 12").grid(row=6, column=1, sticky=W)
        ttk.Label(param_window, text="Valuation Quarter:", font="Calibri 12").grid(row=7, column=1, sticky=W)

        # variables to store input
        self.company = StringVar()
        self.ValDt = StringVar()

        # variables for output
        self.ValYr = StringVar()
        self.ValMnth = StringVar()
        self.ValQrt = StringVar()

        company_dropdown = ttk.Combobox(state="readonly", textvariable=self.company, values=CmpnTbl['CmpnLst'].tolist())
        company_dropdown.grid(row=1, column=2, padx=(0, 5))
        self.company = company_dropdown.get()

        ttk.Entry(param_window, textvariable=self.ValDt,
                  justify=RIGHT, font="Calibri 12").grid(row=4, column=2, padx=(0, 5))

        ttk.Label(param_window, textvariable=self.ValYr,
                  font="Calibri 12 bold", justify=RIGHT).grid(row=5, column=2, sticky=E)
        ttk.Label(param_window, textvariable=self.ValMnth,
                  font="Calibri 12 bold", justify=RIGHT).grid(row=6, column=2, sticky=E)
        ttk.Label(param_window, textvariable=self.ValQrt,
                  font="Calibri 12 bold", justify=RIGHT).grid(row=7, column=2, sticky=E)

        Button(param_window, text="Calculate",
               command=self.param_calc, font="Calibri 12").grid(row=16, column=1, padx=(100, 5), pady=5)

        Button(param_window, text="Close",
               command=param_window.quit, font="Calibri 12").grid(row=16, column=2, padx=(100, 5), pady=5)

        param_window.mainloop()

    def param_calc(self):

        ValDt = datetime.strptime(self.ValDt.get(), '%d/%m/%Y').date()
        ValYr = ValDt.year
        ValMnth = ValDt.month
        ValQrt = "Q4"

        self.ValYr.set(str(ValYr))
        self.ValMnth.set(str(ValMnth))
        self.ValQrt.set(ValQrt)


Setup = ResModelInput()
print(Setup.ValYr.get()) #this works
print(Setup.company) #this does not print anything even though a selection is made 

我也试过以下但得到错误:

print(Setup.company_dropdown.get())
print(Setup.company.get())
python tkinter combobox
1个回答
0
投票

既然你有这条线:

self.company = company_dropdown.get()

self.company
覆盖为空字符串,并且不再引用
StringVar()
的实例。所以改变
company_dropdown
的选择不会再自动更新它。

只需删除上面的行并更改最后一行:

print(Setup.company)

print(Setup.company.get())
© www.soinside.com 2019 - 2024. All rights reserved.