首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,问题从带有按钮的组合框中获取值

Python,问题从带有按钮的组合框中获取值
EN

Stack Overflow用户
提问于 2019-04-25 06:52:42
回答 2查看 497关注 0票数 0

我尝试用按钮获取当前组合框的值,并显示消息。但是,我做了一些错误的事情,以正确地获得所选的值。

代码语言:javascript
复制
AttributeError: 'SelectDB' object has no attribute 'cmb'

我是怎么得到组合框值的?

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-25 08:07:52

网格、pack和place函数、条目对象的和所有其他小部件的都不返回。在python中,当您执行().b()时,表达式的结果是任何b()返回,因此条目(.).grid(.)都不会回来的。

你应该把它分成两行

self.cmb = ttk.Combobox(self.wind, width="10", values=("Local (sqllite)","MYSQL")) self.cmb.grid (row = 0, column = 1)

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2019-04-25 08:07:12

试试吧,我做了些改变

代码语言:javascript
复制
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)
        self.cbCombo = ttk.Combobox(self.wind, width="10", values=("Local (sqllite)","MYSQL"))
        self.cbCombo.grid (row = 0, column = 1)
        ttk.Button(text="Start", command=self.checkcmbo).grid (row = 1, column = 0)

    def checkcmbo(self):

        if self.cbCombo.current()!=-1:
            if self.cbCombo.current() ==0:
                msg="You choos sqlite"
            else:
                msg="You choos MYSQL"

            messagebox.showwarning('MyApp',msg,)
        else:
            messagebox.showwarning('MyApp','You must choose something!',)

if __name__ == '__main__':
    wind = Tk()
    application = SelectDB(wind)
    wind.mainloop()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55843424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档