检索和使用tkinter组合框选择

时间:2018-05-18 02:19:44

标签: python python-3.x tkinter combobox

我正在为自定义计算器组装GUI,自动将某些测量单位转换为其他测量单位。

我想返回所选的实际文本,以便我可以编写来自用户所选内容的if语句。如何让python返回实际值而不是我现在得到的值?

每当我测试此代码时,我会收到以下内容:

VirtualEvent事件x = 0 y = 0

以下是我尝试用于此过程的代码部分。对于下面的示例代码,我希望用户能够以英亩或平方英尺输入区域。然后,我计划编写一个if语句,将他们选择的任何内容转换为平方公里(此示例中未包含的数字输入代码,以保证此文章的简洁)。

import tkinter as tk
from tkinter.ttk import *

master = tk.Tk()
master.title("Gas Calculator")
v = tk.IntVar()
combo = Combobox(master)

def callback(eventObject):
    print(eventObject)

comboARU = Combobox(master)
comboARU['values']= ("Acres", "Ft^2")
comboARU.current(0) #set the selected item
comboARU.grid(row=3, column=2)
comboARU.bind("<<ComboboxSelected>>", callback)

master.mainloop()

如果我能扩展任何东西,请告诉我。我仍然是python的新手,所以如果这只是一个我想念的简单语法,我不会感到惊讶。

3 个答案:

答案 0 :(得分:1)

您应该使用comboARU函数检索get()的内容,如下所示:

def callback(eventObject):
    print(comboARU.get())

答案 1 :(得分:1)

您可以直接从事件对象中检索Combobox的值 by eventObject.widget.get()。

OutputPath

答案 2 :(得分:0)

如果您希望能够使用通过comboAru.current(0)设置的默认值,则事件处理将无法正常工作,我发现按OK按钮获取组合框值最有效,并且如果需要要获取值并在以后使用它,最好创建一个类,避免使用全局变量(因为类实例及其变量在tkinter窗口销毁后仍保留)(基于答案https://stackoverflow.com/a/49036760/12141765)。

import tkinter as tk     # Python 3.x
from tkinter import ttk

class ComboboxSelectionWindow():
    def __init__(self, master):
        self.master=master
        self.entry_contents=None
        self.labelTop = tk.Label(master,text = "Select one of the following")
        self.labelTop.place(x = 20, y = 10, width=140, height=10)
        self.comboBox_example = ttk.Combobox(master,values=["Choice 1","Second choice","Something","Else"])
        self.comboBox_example.current(0)
        self.comboBox_example.place(x = 20, y = 30, width=140, height=25)

        self.okButton = tk.Button(master, text='OK',command = self.callback)
        self.okButton.place(x = 20, y = 60, width=140, height=25)

    def callback(self):
        """ get the contents of the Entry and exit
        """
        self.comboBox_example_contents=self.comboBox_example.get()
        self.master.destroy()

def ComboboxSelection():

    app = tk.Tk()
    app.geometry('180x100')
    Selection=ComboboxSelectionWindow(app)
    app.mainloop()

    print("Selected interface: ", Selection.comboBox_example_contents)

    return Selection.comboBox_example_contents

print("Tkinter combobox text selected =", ComboboxSelection())