tkinter python 的全局变量问题 [英] global variable issues with tkinter python

查看:70
本文介绍了tkinter python 的全局变量问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to create a simple interface to access the name array with first, last, previous and next functionality. But the global variable I am using as a position tracker is not working. I have already referred to various question. Would really appreciate the help. Here is the code.

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 中即可.更正的工作代码 ->

Too many typos. Plus, you don't need to declare a global in the outermost program space, just in the function defs. Corrected working code ->

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()

这篇关于tkinter python 的全局变量问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆