Раскрывающееся меню Tkinter & MySql ввод базы данных - PullRequest
0 голосов
/ 05 января 2020

здесь впервые, поэтому не уверен, как это работает, но вот проблема, над которой я сейчас работаю. Я создаю базу данных GUI приложение в python, используя Tkinter и MySQL. Я застрял в выпадающих меню. У меня проблема в том, что когда я создаю список или словарь для выпадающего меню, я хочу, чтобы это был пример слова (Один), но когда он будет введен в базу данных, это должно быть число 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()

ps. Я знаю, что, вероятно, у некоторых из вас случится сердечный приступ из моего кода, но я недавно начал изучать thnx за ваше время и помощь

1 Ответ

0 голосов
/ 06 января 2020

Добро пожаловать в stackoverflow. Я видел много худших вопросов: -).

Код должен преобразовывать текст в StringVar в соответствующий числовой код c. Ниже приведено много способов сделать это. Я использовал словарь.

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, но может привести к путанице в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...