吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 147|回复: 11
收起左侧

[经验求助] Python之Tkinter问题请教。

[复制链接]
豆虫 发表于 2024-11-9 12:42
100吾爱币
[Python] 纯文本查看 复制代码
# -*- 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()[0]
    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[0])

    return rows

def nextone():
    lujing=lianxi()
    # print(lujing[0])
    exe = f"{lujing[1]}"
    path = f"{lujing[2]}"
    subprocess.Popen([exe, path])
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[0])
    print("错误次数",rows[1])
# 提交事物
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()



-----------图片显示-----------------------



----------------------问题描述---------------------------------

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 = [0] def shuji(): # 生成一个随机数 shulian=count() num = random.randint(1, shulian) # 随机数 index_list [0] = num 在用 随机数的时候直接调用 num = index_list[0]就行,这样只要你不再次调用def shuji():函数, 每次获得的随机数都是同一个数

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Forgetten 发表于 2024-11-9 12:42




index_list = [0]
def shuji():
    # 生成一个随机数
    shulian=count()
    num = random.randint(1, shulian)  # 随机数
    index_list  [0] = num

在用 随机数的时候直接调用 num = index_list[0]就行,这样只要你不再次调用def shuji():函数,
每次获得的随机数都是同一个数
 楼主| 豆虫 发表于 2024-11-9 12:51
或者说,指定一个数,如果它发生运行改变的话,什么在其他函数中去同步调用这个数。
像Tkinter的这个Button,定义的函数不用实例化就能使用,搞不懂。
Forgetten 发表于 2024-11-9 13:53
给个思路吧
1.先从chess.db读取条数
2.生成随机数作为当前条目的索引值,
3.根据2的索引值去数据库取该索引的数据,如果该索引不存在,则回到2
4.若正确或错误,根据索引修改对应的数据
5.点击下一步 回到2
 楼主| 豆虫 发表于 2024-11-9 14:03
Forgetten 发表于 2024-11-9 13:53
给个思路吧
1.先从chess.db读取条数
2.生成随机数作为当前条目的索引值,

这个代码就是实现你说的第二步

[Python] 纯文本查看 复制代码
def count():
    # 统计未练习数量
    cursor.execute("SELECT COUNT(*) FROM shuju WHERE lianxi < ? and cuowu < ?",(3,3))
    # 获取结果
    rows_count = cursor.fetchone()[0]
    print(f"Number of rows: {rows_count}")
    return rows_count
def shuji():
    # 生成一个随机数
    shulian=count()
    random.seed(shulian)
    num = random.randint(1, shulian)  # 随机数
    return num
 楼主| 豆虫 发表于 2024-11-9 14:54
Forgetten 发表于 2024-11-9 14:11
index_list = [0]
def shuji():
    # 生成一个随机数

[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*- //字符编码
import tkinter as tk
import random

index_list = [0]
def shuji():
    # 生成一个随机数
    num = random.randint(1, 3610)  # 随机数
    global index_list
    index_list[0] = num
# 在用 随机数的时候直接调用 num = index_list[0]就行,这样只要你不再次调用def shuji():函数,
# 每次获得的随机数都是同一个数
shuji()
def cuowu():
    global index_list
    num=index_list[0]
    print("错误按钮随机数",num)

def play():
    global index_list
    num = index_list[0]
    print("开始按钮随机数", num)

def next():
    shuji()
    global index_list
    num = index_list[0]
    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))
 楼主| 豆虫 发表于 2024-11-9 14:59
[Python] 纯文本查看 复制代码
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

报错信息
 楼主| 豆虫 发表于 2024-11-9 15:06
[Python] 纯文本查看 复制代码
CREATE TABLE "shuju" (
	"id"	INTEGER NOT NULL UNIQUE,
	"chengxu"	TEXT NOT NULL,
	"qipu"	TEXT,
	"lianxi"	INTEGER,
	"cuowu"	INTEGER,
	PRIMARY KEY("id" AUTOINCREMENT)
);


数据表信息.
Maxhaha 发表于 2024-11-9 15:07
你update为啥要执行fetchone啊   那个是查询语句   得要 cursor.commit()提交保存   不能执行查询   至于你这个最后面的报错信息     你看下你的第21号   或者把现在的代码发一下   看具体一点的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
豆虫 + 1 + 1 热心回复!

查看全部评分

 楼主| 豆虫 发表于 2024-11-9 15:10
Maxhaha 发表于 2024-11-9 15:07
你update为啥要执行fetchone啊   那个是查询语句   得要 cursor.commit()提交保存   不能执行查询   至于你 ...

[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*- //字符编码
import tkinter as tk
import random
import sqlite3
dbname='F:\棋谱类\chess.db'
conn=sqlite3.connect(dbname)
cursor=conn.cursor()
index_list = [0]
def shuji():
    # 生成一个随机数
    num = random.randint(1, 3610)  # 随机数
    global index_list
    index_list[0] = num
# 在用 随机数的时候直接调用 num = index_list[0]就行,这样只要你不再次调用def shuji():函数,
# 每次获得的随机数都是同一个数
shuji()
def cuowu():
    global index_list
    num=index_list[0]
    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[0])
    print("错误次数",rows[1])
def play():
    global index_list
    num = index_list[0]
    print("开始按钮随机数", num)

def next():
    shuji()
    global index_list
    num = index_list[0]
    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()
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 13:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表