Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tkinter python的全局变量问题_Python_Python 3.x_Tkinter_Tk - Fatal编程技术网

tkinter python的全局变量问题

tkinter python的全局变量问题,python,python-3.x,tkinter,tk,Python,Python 3.x,Tkinter,Tk,我正在尝试创建一个简单的接口来访问名称数组,包括第一个、最后一个、上一个和下一个功能。但我用作位置跟踪器的全局变量不起作用。我已经提到了各种问题。非常感谢你的帮助。这是代码 from tkinter import Tk, Label, Entry, Button, StringVar, IntVar window = Tk() name_array = [('a1','a2','a3'), ('b1','b2','b3'), ('c1','c2','c3'),('d1','d2','d3'

我正在尝试创建一个简单的接口来访问名称数组,包括第一个、最后一个、上一个和下一个功能。但我用作位置跟踪器的全局变量不起作用。我已经提到了各种问题。非常感谢你的帮助。这是代码

from tkinter import Tk, Label, Entry, Button, StringVar, IntVar

window = Tk() 

name_array = [('a1','a2','a3'), ('b1','b2','b3'), ('c1','c2','c3'),('d1','d2','d3')]
global position_track
position_track = IntVar()

first_name = StringVar()
last_name = StringVar()
email = StringVar()

def return_value(pos):
    first_name.set(name_array[pos][0])
    last_name.set(name_array[pos][1])
    email.set(name_array[pos][2])

def update_value(pos):
    name_array[pos] = (first_name.get(), last_name.get(), email.get())

def first_value():
    global position_track
    return_value(0)
    postion_track.set(0)

def last_value():
    global position_track
    return_value(-1)
    postion_track.set(-1)

def next_value():
    global position_track
    if position_track.get() == len(name_array):
        position_track.set(1)
    temp = postion_track.get()
    return_value(temp + 1)
    postion_track.set(temp + 1)

def prev_value():
    global position_track
    if position_track.get() == -1:
        position_track.set(len(name_array - 1))
    temp = postion_track.get()
    return_value(temp - 1)
    postion_track.set(temp - 1)

label_first_name = Label(window, text = 'First Name:', justify = 'right', padx = 5) 
entry_first_name = Entry(window, textvariable = first_name) 
label_last_name = Label(window, text = 'Last Name:', justify = 'right', padx = 5) 
entry_last_name = Entry(window, textvariable = last_name) 
label_email = Label(window, text = 'Email Address:', justify = 'right', padx = 5) 
entry_email = Entry(window, textvariable = email) 


button_first = Button(window, text = 'First', command = first_value) 
button_last = Button(window, text = 'Last', command = last_value) 
button_prev = Button(window, text = 'Prev', command = prev_value) 
button_next = Button(window, text = 'Next', command = next_value)
button_quit = Button(window, text = 'Quit') 
button_quit.configure(command=window.destroy)

labels = [label_first_name, label_last_name, label_email]
entries = [entry_first_name, entry_last_name, entry_email]
buttons = [button_first, button_last, button_prev, button_next, button_last, button_quit]


for i in range(3):
    labels[i].grid(row = i, column = 0, sticky = 'W')
    entries[i].grid(row = i, column = 1, columnspan = 6)

for j in range(6):
    buttons[j].grid(row = 3, column = j, sticky = 'E')




window.mainloop()

拼写错误太多了。另外,您不需要在最外层的程序空间中声明一个
global
,只需要在函数defs中声明。更正的工作代码->

from tkinter import Tk, Label, Entry, Button, StringVar, IntVar

window = Tk()

name_array = [('a1','a2','a3'), ('b1','b2','b3'), ('c1','c2','c3'),('d1','d2','d3')]
position_track = IntVar()

first_name = StringVar()
last_name = StringVar()
email = StringVar()

def return_value(pos):
    first_name.set(name_array[pos][0])
    last_name.set(name_array[pos][1])
    email.set(name_array[pos][2])

def update_value(pos):
    name_array[pos] = (first_name.get(), last_name.get(), email.get())

def first_value():
    global position_track
    return_value(0)
    position_track.set(0)

def last_value():
    global position_track
    return_value(-1)
    position_track.set(-1)

def next_value():
    global position_track
    if position_track.get() == len(name_array):
        position_track.set(1)
    temp = position_track.get()
    return_value(temp + 1)
    position_track.set(temp + 1)

def prev_value():
    global position_track
    if position_track.get() == -1:
        position_track.set(len(name_array) - 1)
    temp = position_track.get()
    return_value(temp - 1)
    position_track.set(temp - 1)

label_first_name = Label(window, text = 'First Name:', justify = 'right', padx = 5)
entry_first_name = Entry(window, textvariable = first_name)
label_last_name = Label(window, text = 'Last Name:', justify = 'right', padx = 5)
entry_last_name = Entry(window, textvariable = last_name)
label_email = Label(window, text = 'Email Address:', justify = 'right', padx = 5)
entry_email = Entry(window, textvariable = email)


button_first = Button(window, text = 'First', command = first_value)
button_last = Button(window, text = 'Last', command = last_value)
button_prev = Button(window, text = 'Prev', command = prev_value)
button_next = Button(window, text = 'Next', command = next_value)
button_quit = Button(window, text = 'Quit')
button_quit.configure(command=window.destroy)

labels = [label_first_name, label_last_name, label_email]
entries = [entry_first_name, entry_last_name, entry_email]
buttons = [button_first, button_last, button_prev, button_next, button_last, button_quit]


for i in range(3):
    labels[i].grid(row = i, column = 0, sticky = 'W')
    entries[i].grid(row = i, column = 1, columnspan = 6)

for j in range(6):
    buttons[j].grid(row = 3, column = j, sticky = 'E')

window.mainloop()

您不需要顶部的
global position\u track
语句。您只需要在函数内部使用
global
,仅供参考,使用globals是一种不好的做法。谢谢,代码工作正常。但当我点击prev时,它仍然会吐出错误,或者nextIt又是
pre\u value
中的一个输入错误
position\u track.set(len(name\u array-1))
应该是
position\u track.set(len(name\u array)-1)
纠正了另一个错误(希望是最后一个),请使用最新的代码。如果不太麻烦的话,您还可以告诉我我定义的更新选项有什么问题吗?一点也不。您的
更新
选项未被使用!我看不出还有其他问题。您可能需要另一个按钮来完成该任务。此外,如果要更新
name\u数组
,则不能将其设置为元组列表,而是列表列表。