元豪 发表于 2022-10-6 15:21:31

tk获取问题

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

非要我再发一个帖子吗?{:10_266:} {:10_266:} {:10_266:}

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

问:

获取

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

中的value的值



python爱好者. 发表于 2022-10-6 15:51:47

这里面没有定义 value 变量吧......
能不能把代码发全?

Twilight6 发表于 2022-10-6 16:24:36


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

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

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

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

Twilight6 发表于 2022-10-6 16:26:20

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

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



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

元豪 发表于 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)

元豪 发表于 2022-10-6 17:35:15

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

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

{:10_245:}{:10_245:}

元豪 发表于 2022-10-6 17:37:15

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

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

{:10_245:}没关系啊,抱怨一下而已,别介意啊{:10_245:}

Twilight6 发表于 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 进行获取

Twilight6 发表于 2022-10-6 17:59:35

元豪 发表于 2022-10-6 17:37
没关系啊,抱怨一下而已,别介意啊



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

元豪 发表于 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

Twilight6 发表于 2022-10-6 18:04:52

元豪 发表于 2022-10-6 18:00
算了让你看一下完整代码






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


Twilight6 发表于 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()

元豪 发表于 2022-10-6 18:07:48

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


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

Twilight6 发表于 2022-10-6 18:21:07

元豪 发表于 2022-10-6 18:07

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



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

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

元豪 发表于 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

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


元豪 发表于 2022-10-6 18:29:03

元豪 发表于 2022-10-6 18:25
我把函数改了一下,效果有趣极了...




哦,是我的问题{:10_262:}

Twilight6 发表于 2022-10-6 18:30:13

元豪 发表于 2022-10-6 18:29
哦,是我的问题



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

元豪 发表于 2022-10-6 18:57:13

Twilight6 发表于 2022-10-6 18:30
哈哈 我测试了下没什么问题~

敢问大佬,有没有办法让按钮按着的时候是True,松开时是False呢?{:10_329:}

Twilight6 发表于 2022-10-6 19:10:53

元豪 发表于 2022-10-6 18:57
敢问大佬,有没有办法让按钮按着的时候是True,松开时是False呢?


看看这篇文章:https://fishc.com.cn/forum.php?mod=viewthread&tid=61373&extra=page%3D1%26filter%3Dtypeid%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()

元豪 发表于 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% ...

我的钱...
页: [1] 2
查看完整版本: tk获取问题