Python之Tkinter问题请教。
# -*- coding: UTF-8 -*- //字符编码import tkinter as tk
import sqlite3
import random
import subprocess
dbname='F:\棋谱类\chess.db'
conn=sqlite3.connect(dbname)
cursor=conn.cursor()
def count():
# 统计未练习数量
cursor.execute("SELECT COUNT(*) FROM shuju WHERE lianxi < ? and cuowu < ?",(3,3))
# 获取结果
rows_count = cursor.fetchone()
print(f"Number of rows: {rows_count}")
return rows_count
def shuji():
# 生成一个随机数
shulian=count()
random.seed(shulian)
num = random.randint(1, shulian)# 随机数
return num
def lianxi():
# 查询没练习的局面
num=shuji()
row=cursor.execute('SELECT id,chengxu,qipu,lianxi, cuowu FROM shuju WHERE id=? and lianxi < ? or cuowu != ?', (num,3,0))
rows=cursor.fetchone()#取第一条记录
print("数据 ",rows)
return rows
def nextone():
lujing=lianxi()
# print(lujing)
exe = f"{lujing}"
path = f"{lujing}"
subprocess.Popen()
def cuowu():
#提交错误局面
num=shuji()
# print(type(num))
# print("随机数",num)
cuo=cursor.execute("UPDATE shuju SET cuowu = cuowu+1 WHERE id=?",(num))
rows = cursor.fetchone()# 取第一条记录
print("当前id",rows)
print("错误次数",rows)
# 提交事物
conn.commit()
打谱=tk.Tk()
打谱.title("象棋布局记忆辅助")
打谱.geometry('150x150-50+50')
tk.Button(打谱,text='错误',font=('黑体',15),width=8,command=cuowu).place(x=10,y=30)
tk.Button(打谱,text='下一局',font=('黑体',15),width=8,command=nextone).place(x=10,y=100)
打谱.mainloop()
# 关闭连接
cursor.close()
conn.close()
-----------图片显示-----------------------
https://rs.wzznft.com/i/2024/11/09/k87tq1.png
----------------------问题描述---------------------------------
1,cuo=cursor.execute("UPDATE shuju SET cuowu = cuowu+1 WHERE id=?",(num))
这句SQL代码没写对,报错。
这句代码的意思是执行一次,往shuju表中的cuowu字段的值累加1,默认值是0.
2,随机数问题:
如果加这个random.seed(shulian),如果加上这个,点击下一局和错误,得到的随机数是一样的,但再次点击,随机数不会变.
如果不加random.seed(shulian),两个按钮得到的随机数不相同。
3,要实现功能:
点击下一局,从数据表中随机取出一条数据,如果错误,点击错按钮,往数据表的cuowu字段值累加1,点击正确按钮,往数据表的lianxi字段值累加1(这个功能还没写到)
问题核心,什么让三个或四个按钮同时传入的随机数是同步的,谢谢各位大虾。麻烦花点时间帮忙解决一下。
index_list =
def shuji():
# 生成一个随机数
shulian=count()
num = random.randint(1, shulian)# 随机数
index_list = num
在用 随机数的时候直接调用 num = index_list就行,这样只要你不再次调用def shuji():函数,
每次获得的随机数都是同一个数
或者说,指定一个数,如果它发生运行改变的话,什么在其他函数中去同步调用这个数。
像Tkinter的这个Button,定义的函数不用实例化就能使用,搞不懂。 给个思路吧
1.先从chess.db读取条数
2.生成随机数作为当前条目的索引值,
3.根据2的索引值去数据库取该索引的数据,如果该索引不存在,则回到2
4.若正确或错误,根据索引修改对应的数据
5.点击下一步 回到2
Forgetten 发表于 2024-11-9 13:53
给个思路吧
1.先从chess.db读取条数
2.生成随机数作为当前条目的索引值,
这个代码就是实现你说的第二步
def count():
# 统计未练习数量
cursor.execute("SELECT COUNT(*) FROM shuju WHERE lianxi < ? and cuowu < ?",(3,3))
# 获取结果
rows_count = cursor.fetchone()
print(f"Number of rows: {rows_count}")
return rows_count
def shuji():
# 生成一个随机数
shulian=count()
random.seed(shulian)
num = random.randint(1, shulian)# 随机数
return num Forgetten 发表于 2024-11-9 14:11
index_list =
def shuji():
# 生成一个随机数
# -*- coding: UTF-8 -*- //字符编码
import tkinter as tk
import random
index_list =
def shuji():
# 生成一个随机数
num = random.randint(1, 3610)# 随机数
global index_list
index_list = num
# 在用 随机数的时候直接调用 num = index_list就行,这样只要你不再次调用def shuji():函数,
# 每次获得的随机数都是同一个数
shuji()
def cuowu():
global index_list
num=index_list
print("错误按钮随机数",num)
def play():
global index_list
num = index_list
print("开始按钮随机数", num)
def next():
shuji()
global index_list
num = index_list
print("刷新按钮随机数", num)
打谱=tk.Tk()
打谱.title("象棋布局记忆辅助")
打谱.geometry('150x150-50+50')
tk.Button(打谱,text='开始',font=('黑体',15),width=8,command=play).place(x=10,y=30)
tk.Button(打谱,text='错误',font=('黑体',15),width=8,command=cuowu).place(x=10,y=65)
tk.Button(打谱,text='刷新',font=('黑体',15),width=8,command=next).place(x=10,y=100)
打谱.mainloop()
经测试,此代码可行,谢谢!!!
还有一个sqlite数据库更新字段的sql代码帮我看一下,写法是否有误,谢谢了
cuo=cursor.execute("UPDATE shuju SET cuowu = cuowu+1 WHERE id=?",(num))
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "F:\象棋程序\网友解答测试.py", line 21, in cuowu
cuo = cursor.execute("UPDATE shuju SET cuowu = cuowu+1 WHERE id=?", (num))
ValueError: parameters are of unsupported type
报错信息 CREATE TABLE "shuju" (
"id" INTEGER NOT NULL UNIQUE,
"chengxu" TEXT NOT NULL,
"qipu" TEXT,
"lianxi" INTEGER,
"cuowu" INTEGER,
PRIMARY KEY("id" AUTOINCREMENT)
);
数据表信息. 你update为啥要执行fetchone啊 那个是查询语句 得要 cursor.commit()提交保存 不能执行查询 至于你这个最后面的报错信息 你看下你的第21号 或者把现在的代码发一下 看具体一点的 Maxhaha 发表于 2024-11-9 15:07
你update为啥要执行fetchone啊 那个是查询语句 得要 cursor.commit()提交保存 不能执行查询 至于你 ...
# -*- coding: UTF-8 -*- //字符编码
import tkinter as tk
import random
import sqlite3
dbname='F:\棋谱类\chess.db'
conn=sqlite3.connect(dbname)
cursor=conn.cursor()
index_list =
def shuji():
# 生成一个随机数
num = random.randint(1, 3610)# 随机数
global index_list
index_list = num
# 在用 随机数的时候直接调用 num = index_list就行,这样只要你不再次调用def shuji():函数,
# 每次获得的随机数都是同一个数
shuji()
def cuowu():
global index_list
num=index_list
print("错误按钮随机数",num)
# num=int(num)
cuo = cursor.execute("UPDATE shuju SET cuowu = cuowu+1 WHERE id=?", (num))
conn.commit()
print(cuo)
rows = cursor.fetchone()# 取第一条记录
print("当前id",rows)
print("错误次数",rows)
def play():
global index_list
num = index_list
print("开始按钮随机数", num)
def next():
shuji()
global index_list
num = index_list
print("刷新按钮随机数", num)
打谱=tk.Tk()
打谱.title("象棋布局记忆辅助")
打谱.geometry('150x150-50+50')
tk.Button(打谱,text='开始',font=('黑体',15),width=8,command=play).place(x=10,y=30)
tk.Button(打谱,text='错误',font=('黑体',15),width=8,command=cuowu).place(x=10,y=65)
tk.Button(打谱,text='刷新',font=('黑体',15),width=8,command=next).place(x=10,y=100)
打谱.mainloop()
页:
[1]
2