首页 > 解决方案 > 在所有情况下,我都将 shape 和 hyd 的值设为 0

问题描述

这是一个 python tkinter 代码。我无法保留值。我总是得到 0

import random
import tkinter as tk
from tkinter import *

myWindow = tk.Tk()
myWindow.title("DESIGN OF LINED CANAL")
v1=IntVar()

Label(myWindow,text="What is the shape of your Canal? ").pack()

R1=Radiobutton(myWindow,text="Trapezoidal",variable=v1,value=0).pack()
R2=Radiobutton(myWindow,text="Rectangular",variable=v1,value=1).pack()
R3=Radiobutton(myWindow,text="Triangular",variable=v1,value=2).pack()
shape=v1.get()


v2=IntVar()
Radiobutton(myWindow,text="Yes",variable=v2,value=0).pack()
Radiobutton(myWindow,text="No",variable=v2,value=1).pack()
hyd=v2.get()

Button(myWindow,text="OK",bg="red",command=myWindow.destroy).pack()
myWindow.mainloop()
print("shape",shape)
print("hyd",hyd)

标签: python-3.xtkinter

解决方案


首先,我想让您知道,粘贴代码的屏幕截图是一种不寻求帮助的好方法。很多用户会拒绝投票并继续前进。所以下次请直接在问题中使用代码。

您遇到的问题是,当您的代码执行时,get()它只会在您的代码启动的那一刻运行,并且永远不会再次运行。你想要在这里做的是get()在你销毁之前使用一个函数来运行你的语句。

我们可以通过简单地添加一个新函数并更改按钮命令来调用该函数来完成此操作。

我还更改了您的代码以更好地适应 PEP8 标准,这样您就可以看到它的样子。

import tkinter as tk


root = tk.Tk()
root.title("DESIGN OF LINED CANAL")
v1 = tk.IntVar()
v2 = tk.IntVar()

def ok_button_function():
    global shape, hyd
    shape=v1.get()
    hyd=v2.get()
    root.destroy()

tk.Label(root, text="What is the shape of your Canal? ").pack()

tk.Radiobutton(root, text="Trapezoidal", variable=v1, value=0).pack()
tk.Radiobutton(root, text="Rectangular", variable=v1, value=1).pack()
tk.Radiobutton(root, text="Triangular", variable=v1, value=2).pack()

tk.Radiobutton(root, text="Yes", variable=v2, value=0).pack()
tk.Radiobutton(root, text="No", variable=v2, value=1).pack()

tk.Button(root, text="OK", bg="red", command=ok_button_function).pack()

root.mainloop()

print("shape", shape)
print("hyd", hyd)

应用关闭前:

在此处输入图像描述

后:

在此处输入图像描述


推荐阅读