Tkinter 下拉菜单和 MySql 数据库输入



第一次在这里发帖,所以不确定这是如何工作的,但这是我目前遇到的问题。 我正在使用Tkinter和MySQL在python中制作数据库GUI应用程序。 我被困在下拉菜单上。我遇到的问题是,当我为下拉菜单创建列表或字典时,我希望它是一个单词示例(One(,但是当它将输入数据库时,如果有意义,它应该是一个数字 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 同步,但可能会在这里的代码中混淆。

最新更新