![]() |
Creating a variables inside FOR loop - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Creating a variables inside FOR loop (/thread-29582.html) |
Creating a variables inside FOR loop - zazas321 - Sep-11-2020 Hello. I would like to know what is really the most efficient and best way to create multiple variables inside for loop. At the moment, I am creating 20 variables one by one and that is not a massive problem for me. See the code below: def picking_gui(): number=count_unique_devices(myConnection) print("number=",number) global device1,device2,device3,device4,device5,device6,device7,device8,device9,device10,device11,device12,device13,device14,device15,device16,device17,device18,device19,device20 #global canvas_tk device1 = canvas_tk.create_rectangle(20,400,90,470,fill='red') canvas_tk.create_text(55,435,text="device1") device2 = canvas_tk.create_rectangle(110,400,180,470,fill='red') canvas_tk.create_text(145,435,text="device2") device3 = canvas_tk.create_rectangle(210,400,280,470,fill='red') canvas_tk.create_text(245,435,text="device3") device4 = canvas_tk.create_rectangle(310,400,380,470,fill='red') canvas_tk.create_text(345,435,text="device4") device5 = canvas_tk.create_rectangle(410,400,480,470,fill='red') canvas_tk.create_text(445,435,text="device5") device6 = canvas_tk.create_rectangle(510,400,580,470,fill='red') canvas_tk.create_text(545,435,text="device6") device7 = canvas_tk.create_rectangle(610,400,680,470,fill='red') canvas_tk.create_text(645,435,text="device7") device8 = canvas_tk.create_rectangle(710,400,780,470,fill='red') canvas_tk.create_text(745,435,text="device8") device9 = canvas_tk.create_rectangle(810,400,880,470,fill='red') canvas_tk.create_text(845,435,text="device9") device10 = canvas_tk.create_rectangle(910,400,980,470,fill='red') canvas_tk.create_text(945,435,text="device10") device11 = canvas_tk.create_rectangle(20,500,90,570,fill='red') canvas_tk.create_text(55,535,text="device11") device12 = canvas_tk.create_rectangle(110,500,180,570,fill='red') canvas_tk.create_text(145,535,text="device12") device13 = canvas_tk.create_rectangle(210,500,280,570,fill='red') canvas_tk.create_text(245,535,text="device13") device14 = canvas_tk.create_rectangle(310,500,380,570,fill='red') canvas_tk.create_text(345,535,text="device14") device15 = canvas_tk.create_rectangle(410,500,480,570,fill='red') canvas_tk.create_text(445,535,text="device15") device16 = canvas_tk.create_rectangle(510,500,580,570,fill='red') canvas_tk.create_text(545,535,text="device16") device17 = canvas_tk.create_rectangle(610,500,680,570,fill='red') canvas_tk.create_text(645,535,text="device17") device18 = canvas_tk.create_rectangle(710,500,780,570,fill='red') canvas_tk.create_text(745,535,text="device18") device19 = canvas_tk.create_rectangle(810,500,880,570,fill='red') canvas_tk.create_text(845,535,text="device19") device20 = canvas_tk.create_rectangle(910,500,980,570,fill='red') canvas_tk.create_text(945,535,text="device20")I am creating 20 rectangles and assigning a different name to each one. The reason why I am assigning a name to each rectangle and declaring it as global, is because I need to be able to access and modify these rectangles in other functions such as: def update_rectangle_color(device_name,last_device): canvas_tk.itemconfig(eval(last_device),fill="red") print("updating rectangle colour=",device_name) canvas_tk.itemconfig(eval(device_name),fill="green") print("item updated") last_device = device_name return last_devicein the function above, I pass the device name, for example "device4" and I will change the colour of that rectangle. My code works fine and as expected, the problem is that everytime the program starts, I calculate how many unique devices I have ( it might be 5, 10, 15 or whatever) and I want to generate the number of rectangles based on the number that has been returned from the function: number=count_unique_devices(myConnection) print("number=",number)I am thinking whether I could use a for loop or simmilar to dynamically create and initialze only the required amount of rectangle everytime? RE: Creating a variables inside FOR loop - bowlofred - Sep-11-2020 Don't create 20 different variables. Create one variable that can hold 20 objects (a list or a dictionary) RE: Creating a variables inside FOR loop - buran - Sep-11-2020 also, in addition to @bowlofred's excellent advise - don't use globals. Make GUI using OOP approach (i.e. with class) RE: Creating a variables inside FOR loop - zazas321 - Sep-11-2020 Thanks everyone, I have managed to create variables using for loop with dictionaries as bowlofred mentioned: def picking_gui(): number=count_unique_devices(myConnection) print("number=",number) global devices devices = {} for x in range(1,number): devices["device{0}".format(x)] = canvas_tk.create_rectangle(20+(x*90),400,90+(x*90),470,fill='red') name_text = "device"+str(x) canvas_tk.create_text(55+(x*90),435,text=name_text) if(x>10): devices["device{10}".format(x)] = canvas_tk.create_rectangle(20+(x*90),500,90+(x*90),570,fill='red')I now will have a look at how to create my GUI using OOP aproach as I have never used it before. It seems more complex than the usual program flow I am used to RE: Creating a variables inside FOR loop - Naheed - Sep-11-2020 i suggest you to use the zip function as well. It will help declare multiple tuples in a single for loop sentence. RE: Creating a variables inside FOR loop - Naheed - Sep-16-2020 (Sep-11-2020, 06:30 AM)bowlofred Wrote: Don't create 20 different variables. Create one variable that can hold 20 objects (a list or a dictionary) Yes agreed with you. We have to create variable with different objects and this way, our code will be managed very easily. |