Python Tkinter下拉菜单&;MySql数据库输入

Python Tkinter下拉菜单&;MySql数据库输入,python,mysql,tkinter,Python,Mysql,Tkinter,第一次在这里发布,所以不确定这是如何工作的,但这里是我目前的问题。 我正在使用Tkinter和MySQL用python制作一个数据库GUI应用程序。 我被下拉菜单卡住了。我遇到的问题是,当我为下拉菜单创建一个列表或字典时,我希望它是一个单词示例(一),但当它要输入数据库时,如果有意义的话,它应该是一个数字e。这是我到目前为止的代码 from tkinter import * from tkinter import ttk from tkinter import messagebox import

第一次在这里发布,所以不确定这是如何工作的,但这里是我目前的问题。 我正在使用Tkinter和MySQL用python制作一个数据库GUI应用程序。 我被下拉菜单卡住了。我遇到的问题是,当我为下拉菜单创建一个列表或字典时,我希望它是一个单词示例(一),但当它要输入数据库时,如果有意义的话,它应该是一个数字e。这是我到目前为止的代码

from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import mysql.connector
from mysql.connector.errors import Error


root = Tk()
root.title("Account Tool 0.0.1a")
root.geometry("640x640")
# =======================================================================================================
account_db = mysql.connector.connect(
   host="localhost",
   user="root",
   passwd="123456",
   port="3310",
   database="realmd",
)
my_cursor = account_db.cursor()
exp_var = StringVar()
data = [
   "Mazda",
   "Volvo",
   "YUGO",
]

exp_var.set("Mazda")
# add acccount
def add_account():
   account = "INSERT INTO `account` (`id`, `username`, `sha_pass_hash`, `sessionkey`, `v`, `s`, `totp_secret`, `email`, `reg_mail`, `joindate`, `last_ip`, `last_attempt_ip`, `failed_logins`, `locked`, `lock_country`, `last_login`, `online`, `expansion`, `mutetime`, `mutereason`, `muteby`, `locale`, `os`, `recruiter`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
   v_account = (
   '', e_username.get(), e_password.get(), '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
   '', '', '', '', '',)

   my_cursor.execute(account, v_account)  # account_lvl, , v_account_lvl
   # commit to db
   account_db.commit()

# Labels
l_exp = Label(root, text="Car :").grid(row=1, column=1)  # drop down manu
l_username = Label(root, text="Username: ").grid(row=3, column=1)
l_passwd = Label(root, text="Password : ").grid(row=4, column=1)
# entry

drop_exp = ttk.OptionMenu(root, exp_var, *data)
drop_exp.grid(row=1, column=2)
e_username = Entry(root, width=20)
e_username.grid(row=3, column=2)
e_password = Entry(root, width=20)
e_password.grid(row=4, column=2)

# button

btn_create = Button(root, text="Create Account", command=add_account)
btn_create.grid(row=5, column=2)

# end window
root.mainloop()

p、 s我知道你们中的一些人可能会因为我的代码而心脏病发作,但我最近才开始学习thnx,感谢大家的时间和帮助

欢迎来到stackoverflow。我见过许多更糟糕的问题:-)

代码需要将StringVar中的文本转换为相应的数字代码。下面有很多方法,我用过字典

data ={'Mazda': 1234, 'Volvo': 567, 'YUGO': 2571 }

data.keys()
# dict_keys(['Mazda', 'Volvo', 'YUGO'])

list(data.keys())
# ['Mazda', 'Volvo', 'YUGO']

data['Volvo']
# 567
以一个小型GUI为例

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

var = tk.StringVar( value = 'Mazda' )
labvar = tk.StringVar()

def do_read():
    print( data[var.get()] )
    labvar.set( data[var.get()] )

ttk.OptionMenu( root, var, 'Mazda', *data.keys() ).grid()
ttk.Label( root, textvariable = labvar).grid()
ttk.Button(root, text ='Click to read option.', command = do_read ).grid()

tk.mainloop()

我希望这是相当容易理解的。您还可以跟踪tk.StringVar,以便在StringVar发生更改时运行函数。这可以用来保持labvar和var的同步,但在这里的代码中可能会混淆。

谢谢你,好心的先生,因为某种原因起了作用:D,现在我还有别的事情要做:'(