【发布时间】:2021-09-25 22:04:32
【问题描述】:
我是 Python 新手,正在尝试使用 TKinter 和本地 PostgreSQL 数据库。我的表单加载,成功连接到数据库,但是当我尝试提交表单字段值时,我收到一条错误消息“无法适应类型 StringVar”。
我将要传递给查询的变量设置为 StringVar 或 IntVar(以匹配 postgres 表中的数据类型)。我将变量用于作为文本变量输入的值,因为它应该允许字符串和整数。我将变量类型设置为 StringVar 或 IntVar(sets 和 reps 是 IntVar)。
我很难理解为什么我的字符串没有作为字符串传递。谢谢你的帮助。我觉得我在正确的轨道上,但不确定如何正确调试此错误。
import tkinter as tk
from tkinter import ttk
from windows import set_dpi_awareness
import tkinter.font as font
import psycopg2
set_dpi_awareness()
root = tk.Tk()
root.title("Workout Log")
# Set StringVar for incoming values
exercise_value = tk.StringVar()
set_value = tk.IntVar()
rep_value = tk.IntVar()
band_value = tk.StringVar()
# Define Function for insert
def save_to_db(*args):
try:
connection = psycopg2.connect(user="postgres",
password="XXXXXXXXXXX",
host="127.0.0.1",
port="5432",
database="testDB")
print("Connection Successful!")
except:
print("Unable to connect to database")
try:
cur = connection.cursor()
cur.execute("INSERT INTO workoutlog (name, set, rep, band) VALUES (%s,%s,%s,%s)", (exercise_value, set_value, rep_value, band_value))
connection.comit()
cur.close()
except (Exception, psycopg2.Error) as error:
print("Failed to insert record", error)
# Setup main frame
main = ttk.Frame(root, padding=(30,15))
main.grid()
root.columnconfigure(0, weight=1)
# Labels and Buttons for Exercise, Set, Rep, Band, and Submit Button
exercise_label = ttk.Label(main, text="Exercise: ")
exercise_input = ttk.Entry(main, width=20, textvariable=exercise_value)
set_label = ttk.Label(main, text="Set: ")
set_input = ttk.Entry(main, width=10, textvariable=set_value)
rep_label = ttk.Label(main, text="Rep: ")
rep_input = ttk.Entry(main, width=10, textvariable=rep_value)
band_label = ttk.Label(main, text="Band: ")
band_input = ttk.Entry(main, width=10, textvariable=band_value)
submit_button = ttk.Button(main, text="Save", command=save_to_db)
# Display and align the labels and fields
exercise_label.grid(column=0, row=0, sticky="W", padx=10, pady=10)
exercise_input.grid(column=1, row=0, sticky="EW", padx=10, pady=10)
set_label.grid(column=0, row=1, sticky="W", padx=10, pady=10)
set_input.grid(column=1, row=1, sticky="EW", padx=10, pady=10)
rep_label.grid(column=0, row=2, sticky="W", padx=10, pady=10)
rep_input.grid(column=1, row=2, sticky="EW", padx=10, pady=10)
band_label.grid(column=0, row=3, sticky="W", padx=10, pady=10)
band_input.grid(column=1, row=3, sticky="EW", padx=10, pady=10)
submit_button.grid(column=0, row=4, columnspan=2, sticky="EW", pady=10)
root.mainloop()
【问题讨论】:
标签: python-3.x tkinter