gpt4 book ai didi

python - 为什么两个 tkinter 条目使用相同的编号?

转载 作者:行者123 更新时间:2023-11-30 22:22:20 24 4
gpt4 key购买 nike

import os
import tkinter
import tkinter.font as tkFont
from tkinter import *

coord1 = "0,0"
coord2 = "0,0"
EQ = "y = mx + b"


def tkinter_window():
global coord1Entry
global coord2Entry
global coord1
global coord

tk = Tk()

tk.title("Math Graph")

#create
font1 = tkFont.Font(family="Source Code Pro", size=16)
font2 = tkFont.Font(family="Source Code Pro", size=10)

coord1Label = Label(tk, text='X coordinate 1:\n( "x,y", no parentheses )', font=font1)
coord2Label = Label(tk, text='Y coordinate 2:\n( "x,y", no parentheses )', font=font1)

这是我定义两个似乎使用相同数字的条目的部分:

    coord1Entry = Entry(tk, textvariable=coord1)
coord2Entry = Entry(tk, textvariable=coord2)

所以问题是,当我运行该程序时,它们像往常一样什么也没显示。但是,一旦我在其中一个条目中输入一个字符,它们就会显示该字符。我不明白为什么,他们使用不同的变量?有人可以帮助我吗?

    coordButton = Button(tk, text="Done! (use coordinates)", font=font1)


equationLabel = Label(tk, text="Equation: y =", font=font1)
equationEntry = Entry(tk, textvariable=EQ, font=font1)
equationButton = Button(tk, text="Done! (use equation)", font=font1)

iwantanswersCheckbox = Checkbutton(tk, text="I want m, x, b, intercept and x-intercept", font=font1)
iwantgraphCheckbox = Checkbutton(tk, text="I want a graph", font=font1)
info1Label = Label(tk, text="***Both boxes may be checked***", font=font2)


#pack
coord1Label.grid(row=0, column=0, padx=15, pady=15)
coord2Label.grid(row=1, column=0, padx=15, pady=15)

coord1Entry.grid(row=0, column=1, padx=5, pady=5)
coord2Entry.grid(row=1, column=1, padx=5, pady=5)

coordButton.grid(row=2, columnspan=2, padx=5, pady=15)


equationLabel.grid(row=3, column=0, sticky=E, padx=5, pady=5)
equationEntry.grid(row=3, column=1, padx=5, pady=5)
equationButton.grid(row=4, columnspan=2, padx=5, pady=15)

iwantanswersCheckbox.grid(row=5, columnspan=2, padx=5, pady=5)
iwantgraphCheckbox.grid(row=6, columnspan=2)
info1Label.grid(row=7, columnspan=2)

os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
tk.mainloop()

tkinter_window()

def matplotlib_window():
import matplotlib.pyplot as plt

coordX[0] = Xcoord1Entry.get()
coordX[1] = Xcoord2Entry.get()
coordY[0] = Ycoord1Entry.get()
coordY[1] = Ycoord2Entry.get()
plt.plot(coordX, coordY)
plt.legend(loc=4)
plt.xlabel("x")
plt.ylabel("y")
plt.show()

问题所在的主要代码区域(根据要求):

import tkinter
import tkinter.font as tkFont
from tkinter import *

coord1 = "0,0"
coord2 = "0,0"


def tkinter_window():
global coord1Entry
global coord2Entry
global coord1
global coord

tk = Tk()

tk.title("Math Graph")

#create
font1 = tkFont.Font(family="Source Code Pro", size=16)
font2 = tkFont.Font(family="Source Code Pro", size=10)

coord1Label = Label(tk, text='X coordinate 1:\n( "x,y", no parentheses )', font=font1)
coord2Label = Label(tk, text='Y coordinate 2:\n( "x,y", no parentheses )', font=font1)

coord1Entry = Entry(tk, textvariable=coord1)
coord2Entry = Entry(tk, textvariable=coord2)


#pack
coord1Label.grid(row=0, column=0, padx=15, pady=15)
coord2Label.grid(row=1, column=0, padx=15, pady=15)

coord1Entry.grid(row=0, column=1, padx=5, pady=5)
coord2Entry.grid(row=1, column=1, padx=5, pady=5)


tk.mainloop()

tkinter_window()

最佳答案

这是因为当您需要使用 special tkinter variables 之一的两个不同实例时,您为 textvariable 选项使用相同的字符串。 (StringVar 等)

顺便说一句,您几乎不需要使用textvariable。我的建议是忽略它,因为你显然没有使用它。

<小时/>

发生这种情况是因为小部件只是一个在嵌入式 Tcl 解释器中实现的小部件的薄包装。 textvariable 选项的字符串值在嵌入式 Tcl 解释器中被视为全局变量名称。由于两个字符串相同,因此它们在 tcl 解释器中成为相同的变量(是的,"0.0" 作为 tcl 变量是完全有效的)。

这种行为实际上就是为什么 textvariable 可以成为如此强大的工具 - 您可以将两个或多个小部件链接在一起,这样当一个小部件中的值发生变化时,它会立即反射(reflect)在另一个小部件中。另外,可以在这些变量上设置跟踪,以便在读取、写入或取消设置变量时获得回调。

但是,这在 Tcl 中编码时更有用,因为在 Tcl 中,textvariable 可以是普通的 Tcl 变量。在 tkinter 中,它必须是一种特殊类型的对象 - StringVarIntVarDoubleVarBooleanVar 的实例code> ——所以你不能将它与普通变量一起使用。

关于python - 为什么两个 tkinter 条目使用相同的编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com