首页 > 解决方案 > 尝试使用 Spinbox 和 RadioButtons 将列表的一部分添加到另一部分

问题描述

我最近一直在做一些事情,你有一个名字列表,只有当某个单选按钮被点击并按下按钮时才会发生。

from tkinter import *
main_window = Tk()
v = IntVar()
def preorder():
    pass
preorder_button = Radiobutton(main_window, text = "PreOrder", indicatoron = 0,
              width = 10,
              padx = 20, 
              variable=v, 
              command=preorder,
              value=1)

# Making a Spin wheel
wheel = Spinbox(main_window, from_=1, to=2, width = 3, bd=0, font = (24))

# Shopping cart list
shopping_cart = Text(main_window, width = 30, height = 10, borderwidth = 2, relief = 'groove')

# Making an 'Add To Cart' Button
var = 0
InvoiceList = []
A_List = ['Hello', 'Goodbye']
def AddToCart():
    global var, InvoiceList
    spinInt = int(wheel.get())
    if v == 1:
        InvoiceList.append(str(A_List[int(wheel.get()) - 1]))

    print(InvoiceList)
    shopping_cart.insert(END, InvoiceList[var] + '\n')
    var = var + 1

AddCartButton = Button(main_window, text="Add To Cart", width=10, padx=20, command=AddToCart).grid(row=8, column=1, columnspan=2, sticky=SW)

preorder_button.grid(row = 3, column = 1)
wheel.grid(row = 3, column = 3, rowspan = 2)
shopping_cart.grid(row = 6, column = 1, columnspan = 4)
main_window.mainloop()

问题是,无论我做什么,我总是收到一个错误,说发票字符串中没有任何内容,所以我猜这是代码如何将第一个列表中的一部分添加到第二个列表的问题但是我不知道它有什么问题。

这是我得到的错误:

    []
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\jackb\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "c:/Users/jackb/Documents/UNI/IFB104/Assignment 2/online_shopping_app.py", line 332, in AddToCart
    shopping_cart.insert(END, InvoiceList[var] + '\n')
IndexError: list index out of range

这段代码应该做的是,当单选按钮被选中并按下按钮时,它会根据旋转框设置的内容复制列表的一部分以供将来使用,然后在文本框中显示添加的项目用户看到

标签: pythonpython-3.xtkinter

解决方案


过了一会儿我想通了。问题是 If 语句正在检查v它应该检查的时间,v.get()因为v它本身只是 give back IntVar()。你可以在这里看到这个当你做print(v)vsprint(v.get())因为v它本身输出PY_VAR0v.get()输出1


推荐阅读