在Python3中将文本字段(GUI中)中的数字转换为整数

2024-10-06 12:31:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我无法将GUI中文本框的输入转换为整数。 完整的代码(因为我不知道问题出在哪里)是:

from tkinter import *

master = Tk()
master.wm_title("ggT berechnen")
master.config(background = "#FFFFAA") # Hintergrundfarbe des Fensters
Label(master, text="X-Wert").grid(row=0)
Label(master, text="Y-Wert").grid(row=1)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

def ggT(X = e1.get(), Y = e2.get()):
    X = int(X)
    Y = int(Y)
    while(X != Y):
        if X > Y:
            X, Y = X - Y, Y
        else:
            Y, X = Y - X, X
    print( X )

buttonFrame = Frame(master)
buttonFrame.grid(row=2, column=1, padx=10, pady=3)

B1 = Button(buttonFrame, text="ggT", bg="#FF0000", width=15, command=ggT)
B1.grid(row=2, column=1, padx=10, pady=3)

mainloop()

我无法将字符串转换为整数。 有人能帮我吗

我的第二个问题是: 如何在GUI的另一个文本字段中输出ggT函数? 如果我也能在那里得到帮助,那就太好了,谢谢


Tags: textmastergetguicolumn整数labelgrid
1条回答
网友
1楼 · 发布于 2024-10-06 12:31:50

第一个问题

问题是Python默认值在定义函数时计算一次(即调用函数时不动态计算)

所以你必须显式地分配X和Y

更改:

def ggT(X = e1.get(), Y = e2.get()):

致:

def ggT():
    X = e1.get()
    Y = e2.get()

第二个问题

一种方法是将StringVar连接到标签的文本。这允许按如下方式更改标签文本

代码

from tkinter import *

master = Tk()
master.wm_title("ggT berechnen")
master.config(background = "#FFFFAA") # Hintergrundfarbe des Fensters
Label(master, text="X-Wert").grid(row=0)
Label(master, text="Y-Wert").grid(row=1)
Label(master, text="Z-Wert").grid(row=2)

e1 = Entry(master)
e2 = Entry(master)

# Label with StringVar text associated
text = StringVar()  
e3 = Label(master, textvariable = text)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
e3.grid(row=2, column=1)

def ggT():
    X, Y = e1.get(), e2.get()

    # convert to int and 
    # use absolute value to handle case of X or Y negative
    X, Y = abs(int(X)), abs(int(Y))

    if min(X, Y) > 0: # abs(X) and abs(Y) > 0 
                      # avoids infinite loop
        while(X != Y):
            if X > Y:
                X, Y = X - Y, Y
            else:
                Y, X = Y - X, X

        # update label with X
        text.set(str(X))
    else:
        text.set('X and Y must be non-zero')
    
buttonFrame = Frame(master)
buttonFrame.grid(row=3, column=1, padx=10, pady=3)

B1 = Button(buttonFrame, text="ggT", bg="#FF0000", width=15, command=ggT)
B1.grid(row=3, column=1, padx=10, pady=3)

mainloop()

相关问题 更多 >