鱼C论坛

 找回密码
 立即注册
查看: 5192|回复: 7

[已解决]python tkinter,怎么把从文本框里面获得的内容赋值给一个新的变量

[复制链接]
发表于 2020-11-11 21:33:47 | 显示全部楼层 |阅读模式

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

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

x
from tkinter import *
root=Tk()


Label(root,text="分类数:").grid(row=0,column=0)
Label(root,text="依次输入几个分类高斯分布均值,方差:").grid(row=1,column=0)

v1=StringVar()
v2=StringVar()

e1=Entry(root,textvariable=v1)
e2=Entry(root,textvariable=v2)
e1.grid(row=0,column=1,padx=5,pady=5)
e2.grid(row=1,column=1,padx=5,pady=5)
    
global num
global variables 

def get_variables():
    num= e1.get() #获取文本框内容
    variables = e2.get()
    print(num)
    print(variables)
 
Button(root,text="确认",width=10,command= get_variables)\
                .grid(row=2,column=2,sticky=W,padx=10,pady=10)
                
Button(root,text="退出",width=10,command=root.quit)\
                .grid(row=3,column=2,sticky=E,padx=10,pady=10)
print(num)
print(variables)                
mainloop()
最佳答案
2020-11-11 22:49:32
猪猪虾 发表于 2020-11-11 22:41
您可能没明白我的意思,我是希望在程序最后能打印出来我输入文本框的值
您修改之后的程序,还是不能打印 ...

通过组件来打印 num 和 variables 的值(输入后需要先按确定,使得 num、variables 赋值),参考代码:
from tkinter import *

root = Tk()

Label(root, text="分类数:").grid(row=0, column=0)
Label(root, text="依次输入几个分类高斯分布均值,方差:").grid(row=1, column=0)

v1 = StringVar()
v2 = StringVar()

e1 = Entry(root, textvariable=v1)
e2 = Entry(root, textvariable=v2)
e1.grid(row=0, column=1, padx=5, pady=5)
e2.grid(row=1, column=1, padx=5, pady=5)

num,variables = None,None

def get_variables():
    global num,variables
    num = e1.get()  # 获取文本框内容
    variables = e2.get()

Button(root, text="确认", width=10, command=get_variables) \
    .grid(row=2, column=2, sticky=W, padx=10, pady=10)

Button(root, text="退出", width=10, command=root.quit) \
    .grid(row=3, column=2, sticky=E, padx=10, pady=10)

def print_value():
    print(num)
    print(variables)

Button(root, text="打印", width=10, command=print_value) \
    .grid(row=2, column=1, sticky=E, padx=10, pady=10)


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

使用道具 举报

发表于 2020-11-11 22:20:19 | 显示全部楼层


先在全局创建 num 和 variables 变量,然后在函数内将文本框内容赋值时候用 global 声明即可

参考代码(下面线程部分可以删除,只是为了证明 数据成功被赋值而已):
from tkinter import *

root = Tk()

Label(root, text="分类数:").grid(row=0, column=0)
Label(root, text="依次输入几个分类高斯分布均值,方差:").grid(row=1, column=0)

v1 = StringVar()
v2 = StringVar()

e1 = Entry(root, textvariable=v1)
e2 = Entry(root, textvariable=v2)
e1.grid(row=0, column=1, padx=5, pady=5)
e2.grid(row=1, column=1, padx=5, pady=5)

num,variables = None,None

def get_variables():
    global num,variables
    num = e1.get()  # 获取文本框内容
    variables = e2.get()

Button(root, text="确认", width=10, command=get_variables) \
    .grid(row=2, column=2, sticky=W, padx=10, pady=10)

Button(root, text="退出", width=10, command=root.quit) \
    .grid(row=3, column=2, sticky=E, padx=10, pady=10)

# ---------- 测试数值是否被赋值线程打印 ----------------------------
from threading import Thread
from time import sleep

def func():
    while True:
        sleep(1)
        print('num:',num)
        print('variables:',variables)

thread1 = Thread(target=func)
thread1.start()
# -------------------------------------------------------------

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

使用道具 举报

 楼主| 发表于 2020-11-11 22:41:35 | 显示全部楼层
Twilight6 发表于 2020-11-11 22:20
先在全局创建 num 和 variables 变量,然后在函数内将文本框内容赋值时候用 global 声明即可

参考代 ...

您可能没明白我的意思,我是希望在程序最后能打印出来我输入文本框的值
您修改之后的程序,还是不能打印
from tkinter import *

root = Tk()

Label(root, text="分类数:").grid(row=0, column=0)
Label(root, text="依次输入几个分类高斯分布均值,方差:").grid(row=1, column=0)

v1 = StringVar()
v2 = StringVar()

e1 = Entry(root, textvariable=v1)
e2 = Entry(root, textvariable=v2)
e1.grid(row=0, column=1, padx=5, pady=5)
e2.grid(row=1, column=1, padx=5, pady=5)

num,variables = None,None

def get_variables():
    global num,variables
    num = e1.get()  # 获取文本框内容
    variables = e2.get()

Button(root, text="确认", width=10, command=get_variables) \
    .grid(row=2, column=2, sticky=W, padx=10, pady=10)

Button(root, text="退出", width=10, command=root.quit) \
    .grid(row=3, column=2, sticky=E, padx=10, pady=10)

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

使用道具 举报

发表于 2020-11-11 22:44:43 | 显示全部楼层
猪猪虾 发表于 2020-11-11 22:41
您可能没明白我的意思,我是希望在程序最后能打印出来我输入文本框的值
您修改之后的程序,还是不能打印 ...



你没理解 Python 代码执行机制吧

Python 代码是一行一行执行代码的,而当你执行到窗口弹出时候,代码已经将你的
print(num)
print(variables)

执行完毕了,也就是代码在前面已经执行完毕,所以你如果需要后续打印出 num,variables 的值需要多线程

或者通过一个按钮来激活函数执行打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-11 22:47:26 | 显示全部楼层
Twilight6 发表于 2020-11-11 22:44
你没理解 Python 代码执行机制吧

Python 代码是一行一行执行代码的,而当你执行到窗口弹出时候, ...

这个点我确实不知道,我写这个gui的目的是希望获得用户的输入,然后后续会基于获得的输入来进行一些运算,如果我这样字写不行,那有什么方法能达到这个目的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 22:49:32 | 显示全部楼层    本楼为最佳答案   
猪猪虾 发表于 2020-11-11 22:41
您可能没明白我的意思,我是希望在程序最后能打印出来我输入文本框的值
您修改之后的程序,还是不能打印 ...

通过组件来打印 num 和 variables 的值(输入后需要先按确定,使得 num、variables 赋值),参考代码:
from tkinter import *

root = Tk()

Label(root, text="分类数:").grid(row=0, column=0)
Label(root, text="依次输入几个分类高斯分布均值,方差:").grid(row=1, column=0)

v1 = StringVar()
v2 = StringVar()

e1 = Entry(root, textvariable=v1)
e2 = Entry(root, textvariable=v2)
e1.grid(row=0, column=1, padx=5, pady=5)
e2.grid(row=1, column=1, padx=5, pady=5)

num,variables = None,None

def get_variables():
    global num,variables
    num = e1.get()  # 获取文本框内容
    variables = e2.get()

Button(root, text="确认", width=10, command=get_variables) \
    .grid(row=2, column=2, sticky=W, padx=10, pady=10)

Button(root, text="退出", width=10, command=root.quit) \
    .grid(row=3, column=2, sticky=E, padx=10, pady=10)

def print_value():
    print(num)
    print(variables)

Button(root, text="打印", width=10, command=print_value) \
    .grid(row=2, column=1, sticky=E, padx=10, pady=10)


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

使用道具 举报

发表于 2020-11-11 22:51:00 | 显示全部楼层
猪猪虾 发表于 2020-11-11 22:47
这个点我确实不知道,我写这个gui的目的是希望获得用户的输入,然后后续会基于获得的输入来进行一些运算 ...



获得用户输入目标已经达成了,前几个代码都能将文本框的内容赋值到你需要赋值的变量上去哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-12 14:43:34 | 显示全部楼层
Twilight6 发表于 2020-11-11 22:51
获得用户输入目标已经达成了,前几个代码都能将文本框的内容赋值到你需要赋值的变量上去哈

赋值不了啊,我确实能打印了,我希望两个返回值能给到str1,str2


from tkinter import *

def GUI():
    root = Tk()
    Label(root, text="分类数:").grid(row=0, column=0)
    Label(root, text="依次输入几个分类高斯分布均值,方差:").grid(row=1, column=0)
    
    v1 = StringVar()
    v2 = StringVar()
    
    e1 = Entry(root, textvariable=v1)
    e2 = Entry(root, textvariable=v2)
    e1.grid(row=0, column=1, padx=5, pady=5)
    e2.grid(row=1, column=1, padx=5, pady=5)
    
    num,variables = None,None
    
    def get_variables():
        global num,variables
        num = e1.get()  # 获取文本框内容
        variables = e2.get()
    
    Button(root, text="确认", width=10, command=get_variables) \
        .grid(row=2, column=2, sticky=W, padx=10, pady=10)
    
    Button(root, text="退出", width=10, command=root.quit) \
        .grid(row=3, column=2, sticky=E, padx=10, pady=10)
    
    def print_value():
        
        print(num)
        print(variables)
    
    Button(root, text="打印", width=10, command=print_value) \
        .grid(row=2, column=1, sticky=E, padx=10, pady=10)
    return v1.get(),v2.get()
    
str1 ,str2 = GUI()

letter = []

for char in (str1):
    if char != ' ':
        letter.append(int(str1))
    else:
        letter.append('*')

factors = [1, 10 ,100]
value = []
number = 0
begin = 0
for i in range(len(letter)):
    for k in range(begin ,len(factors)):
        if letter[i] != '*':
            number  = number + letter[i] * factors[i]
        else:
            value.append(number)
            number = 0
            begin = 0

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 21:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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