首页 > 解决方案 > Python,问题获取带有按钮的组合框的值

问题描述

我尝试使用按钮获取当前组合框的值并显示消息。但是我做错了什么来正确地选择选择的值。

AttributeError: 'SelectDB' object has no attribute 'cmb'

我如何获得组合框值?

import sqlite3
from tkinter import *
from tkinter import ttk
from tkinter import messagebox

class SelectDB:
    def __init__(self, wind) :
        self.wind = wind
        self.wind.title ('MyApp')
        ttk.Label(self.wind, text="Select you're Database:").grid (row = 0, column = 0)
        ttk.Combobox(self.wind, width="10", values=("Local (sqllite)","MYSQL")).grid (row = 0, column = 1)
        ttk.Button(text="Start", command=self.checkcmbo).grid (row = 1, column = 0)

    def checkcmbo(self):
        if self.cmb.get() == "Local (sqllite)":
            messagebox.showinfo("What user choose", "you choose Local (sqllite)")
        elif self.cmb.get(self) == "MYSQL":
            messagebox.showinfo("What user choose", "you choose MYSQL")
        else:
            messagebox.showinfo("What user choose", "NOTHING")

if __name__ == '__main__':
    wind = Tk()
    application = SelectDB(wind)
    wind.mainloop()

标签: pythonbuttontkintercombobox

解决方案


Entry 对象和所有其他小部件的grid、pack 和 place 函数返回 None。在 python 中,当您执行 a().b() 时,表达式的结果是 b() 返回的任何内容,因此 Entry(...).grid(...) 将返回 None。

你应该把它分成两行

    self.cmb = ttk.Combobox(self.wind, width="10", values=("Local (sqllite)","MYSQL"))
    self.cmb.grid (row = 0, column = 1)
class SelectDB:
def __init__(self, wind) :
    self.wind = wind
    self.wind.title ('MyApp')

    ttk.Label(self.wind, text="Select you're Database:").grid (row = 0, column = 0)

    self.cmb = ttk.Combobox(self.wind, width="10", values=("Local (sqllite)","MYSQL"))
    self.cmb.grid (row = 0, column = 1)
    btn = ttk.Button(text="Start", command=self.checkcmbo).grid (row = 1, column = 0)

def checkcmbo(self):
    if self.cmb.get() == "Local (sqllite)":
        messagebox.showinfo("What user choose", "you choose Local (sqllite)")
    elif self.cmb.get() == "MYSQL":
        messagebox.showinfo("What user choose", "you choose MYSQL")
    else:
        messagebox.showinfo("What user choose", "NOTHING")

  if __name__ == '__main__':
      wind = Tk()
      application = SelectDB(wind)
      wind.mainloop()

推荐阅读