Python Forum

Full Version: Referencing Combo Box
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi - I am trying to write a Python code to basically do a sumproduct function based on the item selected and the quantity of that item selected.

My code is below. I am having trouble referencing the combobox values. The calculate function is where I'm going wrong. How do I reference the comboboxes I have inputted onto the 'NewWindow'? I add comboboxes to the page based on the number of items selected and the all have the same values,etc.

For example if I select 2 'pizzas' and 1 'CocaCola' then the code should print 33. ((2*$15)+(1*$3))

This is my error:
Error:
cost = fooditems2[x] * combobox.get() TypeError: can't multiply sequence by non-int of type 'str'
fooditems = {'pizza' : [15] , 'breadsticks' : [5] ,'wings' : [10],'CocaCola' : [3] ,'brownie' : [2]}
fooditems2 = []
quantity = ['1','2','3','4']



import tkinter as tk
from tkinter import *
from tkinter import ttk

menu = Tk()
menu.geometry('500x300')

check_boxes = {item:tk.IntVar() for item in fooditems}

for item in fooditems:
    cb = tk.Checkbutton(menu, text=item, variable=check_boxes[item], anchor='w', onvalue=1, offvalue=0, width=50)
    cb.pack()

combobox = ttk.Combobox(menu, values=quantity)


def Open():
    New_Window = Toplevel(menu)
    New_Window.geometry('500x300')
    calculateButton = tk.Button(New_Window, text = 'calculate', command=calculate)
    calculateButton.place(x=250,y=250)
    for key, item in check_boxes.items():
        if item.get() == 1:
            fooditems2.append(key)
    for x in range(len(fooditems2)):
        b = Label(New_Window, text=fooditems2[x])
        b.pack()
        combobox = ttk.Combobox(New_Window, values=quantity)
        combobox.pack()
    New_Window.mainloop()

def calculate():
    for x in range(len(fooditems2)):
        cost = fooditems2[x] * combobox.get()
        print(cost)

confirmButton = tk.Button(menu, text = 'Confirm', command=Open)
confirmButton.place(x=250,y=250)



menu.mainloop()
cost calculation is commented out on line 40
(Feb-12-2020, 02:54 AM)Larz60+ Wrote: [ -> ]cost calculation is commented out on line 40

Whoops forgot to uncomment when I was testing. Fixed the error message in OP.
Quote:Fixed the error message in OP.
Is that the complete unaltered error traceback?
I was expecting more
(Feb-12-2020, 03:05 AM)Larz60+ Wrote: [ -> ]
Quote:Fixed the error message in OP.
Is that the complete unaltered error traceback?
I was expecting more

This was the entire message

Error:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\aaaaa\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 1883, in __call__ return self.func(*args) File "C:\Users\aaaaa\Documents\pizzamenu.py", line 40, in calculate cost = fooditems2[x] * combobox.get() TypeError: can't multiply sequence by non-int of type 'str'
I think this is what it's complaining about (haven't tested):
cost = fooditems2[x] * int(combobox.get())
pretty sure combobox.get is string by default
A simple print of fooditems2[x] and combobox.get() will tell you what is what. It looks like fooditems2 contains the description and not the cost but you will have to verify that yourself.
    for key, item in check_boxes.items():
        if item.get() == 1:
            fooditems2.append(key)