私はTkinterとSQLiteを使って作業する新しいPythonユーザ(v3.5)です。ウィジェット(コンボとスピンボックス)から変数へのユーザー入力を取得し、これらの変数をSQLiteデータベースに渡す際に問題が発生しています。私は自分自身で問題を診断しようとしましたが、問題はウィジェットから変数にデータを取得していると思います。私はコードを試してみて、解決策をオンラインで検索しましたが、まだ何かを手に入れることができませんでした。関連するコードは以下の通りです。私は簡潔さのために無関係なビットをハックしようとしました。ユーザ入力をTkinterウィジェットからSQLiteデータベースに転送する
from tkinter import *
from tkinter.ttk import *
import sqlite3
conn = sqlite3.connect("database.db")
c = conn.cursor()
class GUI:
def __init__(self):
self.root = Tk()
self.player_selection_and_score()
self.process_button()
self.create_table()
def player_selection_and_score(self):
player = StringVar
top = LabelFrame(self.root)
top.grid(column=0, row=0)
player1_selection = Combobox(top, width=10, textvariable=player, state='readonly')
player1_selection["values"] = ("Player1", "Player2", "Player3")
player1_selection.grid(column=1, row=0, sticky="w")
player1_selection.current(0)
player1_selection.bind("<<ComboboxSelected>>")
global player1_var
player1_var = player1_selection.get()
player1_score_entry = Spinbox(top, width=5, from_=0, to=10)
player1_score_entry.grid(column=4, row=0)
player1_score_entry.bind("<<SpinboxSelected>>")
global player1_score_var
player1_score_var = player1_score_entry.get()
def process_button(self):
bottom = LabelFrame(self.root)
bottom.grid(column=0, row=2)
process_button = Button(bottom, text="Process Result", command=self.data_entry)
process_button.pack()
def create_table(self):
c.execute("CREATE TABLE IF NOT EXISTS fixtures (player1 TEXT, player1_score REAL)")
def data_entry(self):
c.execute("INSERT INTO fixtures (player1, player1_score) VALUES (?, ?, ?, ?)", (player1_var, player1_score_var))
conn.commit()
player1_var = GUI()
player1_score_var = GUI()
# Start GUI
gui = GUI()
gui.root.mainloop()
conn.close()
c.close()
私は、問題は、コードのこれらの特定の行であるかなり確信している:
player1_selection.bind("<<ComboboxSelected>>")
global player1_var
player1_var = player1_selection.get()
player1_score_entry.bind("<<SpinboxSelected>>")
global player1_score_var
player1_score_var = player1_score_entry.get()
ありがとうございました!!
あなたは '()'値を選択し取得するには、Get使用する機能に ' "<< ComboboxSelected >>"'と ' "<< SpinboxSelected >>" を'バインドする必要があります。今では、スタート時にのみ価値が得られます。 – furas
と 'global'の代わりに' self.player'を使います – furas