鱼C论坛

 找回密码
 立即注册
查看: 3503|回复: 29

[已解决]tk获取问题

[复制链接]
发表于 2022-10-6 15:21:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 元豪 于 2022-10-6 17:43 编辑

非要我再发一个帖子吗?

都说可以跟帖继续问,大佬一个个的都不回答...

问:

获取
r1 = tk.Radiobutton(window, text='1. 出发', variable=v, value=1, command=ChuFa)
r1.place(x=20, y=40)

中的value的值



最佳答案
2022-10-6 17:57:09
元豪 发表于 2022-10-6 17:33
r1 = tk.Radiobutton(window, text='1. 出发', variable=v, value=1, command=ChuFa)



对,value 的值可以通过 variable = v  这里设置的 v 进行获取

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-6 15:51:47 | 显示全部楼层
这里面没有定义 value 变量吧......
能不能把代码发全?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 16:24:36 | 显示全部楼层

跟帖询问肯定没问题,你刚刚回复我的消息我完全没看见

不是不回复你,一个很简单的问题没必要故意不回复你还叫你继续发帖子

确实是我真的没看见你回复我(可能是被我不小心刷新了消息提醒,然后刚刚午休了一会,直到你现在发新帖子我才回去看了下之前的帖子,抱歉抱歉):

你设置的 v 是 IntVar 对象可以直接使用 .get() 进行获取,例如你这里 多选 的 value 值,可以表示为 v.get()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 16:26:20 | 显示全部楼层
Twilight6 发表于 2022-10-6 16:24
跟帖询问肯定没问题,你刚刚回复我的消息我完全没看见

不是不回复你,一个很简单的问题没必要故意不回 ...



StringVar 值对象也同样可以 .get() 获取 ,.set() 设置

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 17:33:44 | 显示全部楼层
python爱好者. 发表于 2022-10-6 15:51
这里面没有定义 value 变量吧......
能不能把代码发全?

r1 = tk.Radiobutton(window, text='1. 出发', variable=v, value=1, command=ChuFa)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 17:35:15 | 显示全部楼层
Twilight6 发表于 2022-10-6 16:24
跟帖询问肯定没问题,你刚刚回复我的消息我完全没看见

不是不回复你,一个很简单的问题没必要故意不回 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 17:37:15 | 显示全部楼层
Twilight6 发表于 2022-10-6 16:24
跟帖询问肯定没问题,你刚刚回复我的消息我完全没看见

不是不回复你,一个很简单的问题没必要故意不回 ...

没关系啊,抱怨一下而已,别介意啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 17:57:09 | 显示全部楼层    本楼为最佳答案   
元豪 发表于 2022-10-6 17:33
r1 = tk.Radiobutton(window, text='1. 出发', variable=v, value=1, command=ChuFa)



对,value 的值可以通过 variable = v  这里设置的 v 进行获取

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 17:59:35 | 显示全部楼层
元豪 发表于 2022-10-6 17:37
没关系啊,抱怨一下而已,别介意啊



没事,你没错,确实是我忘回复了,你别介意就行

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 18:00:06 | 显示全部楼层
Twilight6 发表于 2022-10-6 17:57
对,value 的值可以通过 variable = v  这里设置的 v 进行获取

算了让你看一下完整代码
# -*- coding: <utf-8> -*- #
import random
import tkinter as tk
from tkinter import messagebox
import time

from matplotlib.widgets import EllipseSelector

window = tk.Tk()
window.title('勇士游戏')
window.geometry('300x250')
window.resizable(False, False)

queding = False
TianShu = 1
GongJi = random.randint(25, 30)
XueLiang = 100
JiE = 100
SuDu = 10
FangYu = 10
xinxi = '''
血量: {}

饥饿度: {}

速度: {}

防御: {}
'''.format(XueLiang, JiE, SuDu, FangYu)

v = tk.IntVar()

def TuiChu():
    tuichu = messagebox.askokcancel(title='退出', message='你确定要退出游戏吗?')
    if tuichu:
        window.quit()

def ZhuCaiDan():
    zhucaidan = messagebox.askokcancel(title='返回', message='你确定要返回主菜单吗?')
    if zhucaidan:
        pass

def QueDing():
    global QueDing
    if QueDing:
        QueDing = True
        print('True')
    else:
        QueDing = False
        print('False')

def ChuFa():
    pass

def ZhuangBei():
    pass

def ChaKanZhuangBei():
    pass

def WuPin():
    pass

def ShiYong():
    pass

def YiTian():
    pass

l = tk.Label(window, text='今天是第 {} 天,你要:'.format(TianShu), font=1)
l.place(x=80, y=5)

XinXi = tk.Label(window, text=xinxi, bg='yellow', fg='black', font=15, width=15, height=8)
XinXi.place(x=150, y=50)

r1 = tk.Radiobutton(window, text='1. 出发', variable=v, value=1, command=ChuFa)
r1.place(x=20, y=40)
r2 = tk.Radiobutton(window, text='2. 装备物品', variable=v, value=2, command=ZhuangBei)
r2.place(x=20, y=65)
r3 = tk.Radiobutton(window, text='3. 查看装备', variable=v, value=3, command=ChaKanZhuangBei)
r3.place(x=20, y=90)
r4 = tk.Radiobutton(window, text='4. 查看物品', variable=v, value=4, command=WuPin)
r4.place(x=20, y=115)
r5 = tk.Radiobutton(window, text='5. 吃东西', variable=v, value=5, command=ShiYong)
r5.place(x=20, y=140)
r6 = tk.Radiobutton(window, text='6. 过了这一天~', variable=v, value=6, command=YiTian)
r6.place(x=20, y=165)

B = tk.Button(window, text='确定', bg='gray', width=25, height=2, command=QueDing)
B.place(x=55, y=195)
if QueDing == True:
    if v.get() == 1:
        print("haha")

m = tk.Menu(window)
f = tk.Menu(m, tearoff=0)
m.add_cascade(label='返回', menu=f)
f.add_command(label='返回主菜单', command=ZhuCaiDan)

window.config(menu=m)

b = tk.Button(window, text='退出游戏', bg='black', fg='white', width=7, height=1, command=TuiChu)
b.place(x=2, y=2)

window.mainloop()

点了确定并按下第一个按钮但是并没有打印haha

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 18:04:52 | 显示全部楼层
元豪 发表于 2022-10-6 18:00
算了让你看一下完整代码



你要把内容放到函数中去,例如可以设置个 button,设置 commad 触发函数,就可以查看每次的打印,否则放到主代码上就只会一开始运行一次


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 18:05:35 | 显示全部楼层
元豪 发表于 2022-10-6 18:00
算了让你看一下完整代码


你这个文字游戏看起来不错哟

可以参考参考这个代码:
from tkinter import *

master = Tk()

v = StringVar()
v.set(2)

Radiobutton(master, text="One", variable=v, value=1).pack(anchor=W)
Radiobutton(master, text="Two", variable=v, value=2).pack(anchor=W)
Radiobutton(master, text="Three", variable=v, value=3).pack(anchor=W)


def show():
    print(v.get())


button = Button(master, text="测试", command=show)
button.pack()

mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 18:07:48 | 显示全部楼层
Twilight6 发表于 2022-10-6 18:04
你要把内容放到函数中去,例如可以设置个 button,设置 commad 触发函数,就可以查看每次的打印,否 ...


’ 确定 ‘ 不就是一个Button吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 18:21:07 | 显示全部楼层
元豪 发表于 2022-10-6 18:07

’ 确定 ‘ 不就是一个Button吗?


没错呀,但是你的代码:
if QueDing == True:
    if v.get() == 1:
        print("haha")

而且你代码中的 get 函数不在 QueDing() 中进行调用嗷

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 18:25:12 | 显示全部楼层
Twilight6 发表于 2022-10-6 18:21
没错呀,但是你的代码:
if QueDing == True:
    if v.get() == 1:

我把函数改了一下,效果有趣极了...
def QueDing():
    global queding
    if queding == False:
        queding = True
        if v.get() == 1:
            print("51616161616161616161616161616")
    else:
        queding = False

现在,一开始,按钮会全部选上...


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 18:29:03 | 显示全部楼层
元豪 发表于 2022-10-6 18:25
我把函数改了一下,效果有趣极了...

哦,是我的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 18:30:13 | 显示全部楼层
元豪 发表于 2022-10-6 18:29
哦,是我的问题



哈哈 我测试了下没什么问题~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 18:57:13 | 显示全部楼层
Twilight6 发表于 2022-10-6 18:30
哈哈 我测试了下没什么问题~

敢问大佬,有没有办法让按钮按着的时候是True,松开时是False呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-6 19:10:53 | 显示全部楼层
元豪 发表于 2022-10-6 18:57
敢问大佬,有没有办法让按钮按着的时候是True,松开时是False呢?



看看这篇文章:https://fishc.com.cn/forum.php?m ... peid%26typeid%3D604

我也是现查现写的,你也可以去鱼C整理的 Tkinter 文档看看

可以这样实现,参考代码:
from tkinter import *
from time import sleep
from threading import Thread

root = Tk()
flag = False





button = Button(root, text="测试")
button.pack()

# ↓ 主要实现代码 --------------------------------
def set_True(event):
    global flag
    flag = True


def set_False(event):
    global flag
    flag = False

button.bind("<Button>", set_True)
button.bind("<ButtonRelease>", set_False)
# ↑ 主要实现代码 --------------------------------

# 多线程打印下实现效果,可以删除
def print_flag():
    while True:
        sleep(1)
        print(flag)


Thread(target=print_flag).start()

mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-6 19:15:24 | 显示全部楼层
Twilight6 发表于 2022-10-6 19:10
看看这篇文章:https://fishc.com.cn/forum.php?mod=viewthread&tid=61373&extra=page%3D1%26filter% ...

我的钱...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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