Python Forum
Referencing Combo Box - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: Referencing Combo Box (/thread-24385.html)



Referencing Combo Box - MC2020 - Feb-11-2020

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



RE: Referencing Combo Box - Larz60+ - Feb-12-2020

cost calculation is commented out on line 40


RE: Referencing Combo Box - MC2020 - Feb-12-2020

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


RE: Referencing Combo Box - Larz60+ - Feb-12-2020

Quote:Fixed the error message in OP.
Is that the complete unaltered error traceback?
I was expecting more


RE: Referencing Combo Box - MC2020 - Feb-12-2020

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



RE: Referencing Combo Box - Larz60+ - Feb-12-2020

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


RE: Referencing Combo Box - woooee - Feb-12-2020

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)