Python “数学”;签署「;错误

Python “数学”;签署「;错误,python,tkinter,Python,Tkinter,我有一个问题,我试着做一个简单的计算器,当我几乎完成并为成功欢呼时,“符号”,即捷克语的“znaménko”(加号、减号、倍数等,译者给我的)总是加号,即使我选择了其他符号。我完全是新手,所以请注意 你能告诉我我做错了什么吗?感谢您的帮助!:) 代码如下: from tkinter import * def znamenkoplus(): znamenko = "+" print(znamenko) def znamenkominus(): znamenko = "-

我有一个问题,我试着做一个简单的计算器,当我几乎完成并为成功欢呼时,“符号”,即捷克语的“znaménko”(加号、减号、倍数等,译者给我的)总是加号,即使我选择了其他符号。我完全是新手,所以请注意

你能告诉我我做错了什么吗?感谢您的帮助!:)

代码如下:

from tkinter import *

def znamenkoplus():
    znamenko = "+"
    print(znamenko)

def znamenkominus():
    znamenko = "-"
    print(znamenko)

def znamenkokrat():
    znamenko = "."
    print(znamenko)

def znamenkodeleno():
    znamenko = ":"
    print(znamenko)


def rovnase():
    prvnicislo = "%s" % (e1.get())
    druhecislo = "%s" % (e2.get())
    float(prvnicislo)
    float(druhecislo)
    print(prvnicislo)
    print(druhecislo)
    print(znamenko)


    if znamenko == "+":
        cislo1 = float(prvnicislo)
        cislo2 = float(druhecislo)
        vysledek = cislo1 + cislo2
        print (vysledek)
        výsledekLabel.configure(text=vysledek)

    if znamenko == "-":
        cislo1 = float(prvnicislo)
        cislo2 = float(druhecislo)
        vysledek = cislo1 - cislo2
        print(vysledek)
        výsledekLabel.configure(text=vysledek)

    if znamenko == ".":
        cislo1 = float(prvnicislo)
        cislo2 = float(druhecislo)
        vysledek = cislo1 * cislo2
        print(vysledek)
        výsledekLabel.configure(text=vysledek)

    if znamenko == ":":
        cislo1 = float(prvnicislo)
        cislo2 = float(druhecislo)
        vysledek = cislo1 / cislo2
        print(vysledek)
        výsledekLabel.configure(text=vysledek)




master = Tk()


znamenko = "+"
master.title("Kalkulačka")
master.geometry("350x500")

firstLabel = Label(text="Vaše první číslo").place(x=25, y=25)
secondlabel = Label(text="Znaménko").place(x=25, y=75)
thirdlabel = Label(text="Vaše druhé číslo").place(x= 25, y= 125)
výsledekLabel = Label(text="", font=("Helvetica",30))
výsledekLabel.place(x=25, y=350, width=300,height=100)
e1 = Entry()
e2 = Entry()

e1.place(x=130, y=25, width=140)
e2.place(x=130, y=125, width=140)

buttonplus = Button(text="+", command=znamenkoplus).place(x=130, y=75)
buttonminus = Button(text="-", command=znamenkominus).place(x=165, y=75)
buttonkrat = Button(text="・", command=znamenkokrat).place(x=197, y=75)
buttondeleno = Button(text=":", command=znamenkodeleno).place(x=237, y=75)
buttonrovnase = Button(text="=", command=rovnase).place(x=130, y=175, width=140)

mainloop()

这不是一个真正的
tkinter
问题,只是一个基本的Python问题

您尝试从函数内部设置全局变量
znamenko
。这是有效的,但只有在使用全局关键字时才有效

尝试:

和其他改变变量的函数类似


这就是为什么
tkinter
应用程序通常有一个可以放置状态变量的主类的原因之一,这样你就可以通过
self
而不是使用global-everywhere来访问它们。

这不是一个真正的
tkinter
问题,只是一个基本的Python问题

您尝试从函数内部设置全局变量
znamenko
。这是有效的,但只有在使用全局关键字时才有效

尝试:

和其他改变变量的函数类似

这就是为什么
tkinter
应用程序通常有一个主类,您可以在其中放置状态变量,因此您可以通过
self
访问它们,而不是使用全局无处不在。

变量阴影 在第64行,您将变量
znamenko
设置为默认值
“+”

znamenko = "+"
然后,在运算符函数中,尝试将其设置为用户定义值,例如:

def znamenkoplus():
    znamenko = "+"
    print(znamenko)
然而,这并不符合你的意思。它改变函数内变量
znamenko
的值。 注意,这不是第64行的变量
znamenko
。这是一个位置完全不同、名称相同的不同变量。当它离开作用域时,函数内部的
znamenko
被释放-全局变量
znamenko
保持不变(这就是为什么它总是
“+”
)。这称为变量阴影

试试这个:

def znamenkominus():
    znamenko = "-"
    print("Znamenko in the function", znamenko)

znamenko = "+"

print("Znamenko before change", znamenko)

znamenkominus()

print("Znamenko after change", znamenko)
znamenko
将具有与更改前相同的值

从函数更改全局变量 您可以通过添加
global znamenko
来更改全局变量:

def znamenkominus():
    global znamenko
    znamenko = "-"
    print("Znamenko in the function", znamenko)

znamenko = "+"

print("Znamenko before change", znamenko)

znamenkominus()

print("Znamenko after change", znamenko)
这将更改全局变量(并且不会创建任何局部变量)

变量阴影 在第64行,您将变量
znamenko
设置为默认值
“+”

znamenko = "+"
然后,在运算符函数中,尝试将其设置为用户定义值,例如:

def znamenkoplus():
    znamenko = "+"
    print(znamenko)
然而,这并不符合你的意思。它改变函数内变量
znamenko
的值。 注意,这不是第64行的变量
znamenko
。这是一个位置完全不同、名称相同的不同变量。当它离开作用域时,函数内部的
znamenko
被释放-全局变量
znamenko
保持不变(这就是为什么它总是
“+”
)。这称为变量阴影

试试这个:

def znamenkominus():
    znamenko = "-"
    print("Znamenko in the function", znamenko)

znamenko = "+"

print("Znamenko before change", znamenko)

znamenkominus()

print("Znamenko after change", znamenko)
znamenko
将具有与更改前相同的值

从函数更改全局变量 您可以通过添加
global znamenko
来更改全局变量:

def znamenkominus():
    global znamenko
    znamenko = "-"
    print("Znamenko in the function", znamenko)

znamenko = "+"

print("Znamenko before change", znamenko)

znamenkominus()

print("Znamenko after change", znamenko)

这将改变全局变量(并且不会创建任何局部变量)

用“无意义”的变量名很难分辨。你试过橡皮鸭吗?您可能只是在每个函数中缺少了
global znamenko
。如果没有它,你总是在函数中创建新的变量,而这些变量又是全局变量的影子。你试过橡皮鸭吗?您可能只是在每个函数中缺少了
global znamenko
。如果没有它,你总是在函数中创建新的变量,这些变量会影响全局变量。非常感谢!这工作做得很好!我遇到了这些问题,函数无法识别来自其他函数的变量,这似乎解决了所有问题。再次感谢你!:)非常感谢你!这工作做得很好!我遇到了这些问题,函数无法识别来自其他函数的变量,这似乎解决了所有问题。再次感谢你!:)