Python-更新GUI,因此它始终使用更新后的列表

我有一个项目,其中一个框架中有多个“小部件”。我将窗口小部件列表传递到名为GUI的类上,该类显示所有这些“窗口小部件”。我的相框上有一个按钮,需要从列表中删除其中一个小部件。是的。但是小部件本身不会从框架中消失。

因此请澄清

GUI类具有对象[Object,Object,Object]的列表。因此,它现在显示4个Widget对象。当我按下删除按钮时,新列表看起来像[Object,Object],但是GUI类中的列表仍然是[Object,Object]。如何使GUI始终使用列表的最新版本?

要澄清的代码

import random
from tkinter import *
import datetime

root = Tk()
root.configure(background="white")
root.title("Project 2.1")

Widgets = []


class GUI:
    def __init__(self,widgets,master):

        self.widgets = widgets
        self.master = master
        self.master.geometry("{0}x{1}+0+0".format(master.winfo_screenwidth(),master.winfo_screenheight()))

        for widget in range(len(widgets)):
            widgets[widget].widgetFrame.pack(side=LEFT,pady=20,padx=20,fill=Y)

        if len(widgets) == 0:
            NoInputLabel = Label(master,text="No modules connected,please connect a module",font='Helvetica 16 bold')
            NoInputLabel.pack(side=TOP)

        removeButton = Button(master,text="Remove widget",command=self.removeWidget)
        removeButton.pack()

        print(self.widgets)

    def removeWidget(self):
        self.widgets = self.widgets[:-1]
        print(self.widgets)



class Widget:
    def __init__(self,master,name):
        self.master = master
        self.name = name

        colorArray = ["#e3e0f3","#eebddd","#80a3db","#036fa0"]

        self.widgetFrame = Frame(master,bg="white")
        # widgetFrame.pack(side=LEFT,padx=50)

        widgetTop = Frame(self.widgetFrame,bg="white")
        widgetTop.pack(side=TOP)

        widgetcenter = Frame(self.widgetFrame,bg="white")
        widgetcenter.pack(side=TOP)

        widgetBottom = Frame(self.widgetFrame,bg="white")
        widgetBottom.pack(side=TOP,fill=X)

        self.WidgetName = Label(widgetTop,text=name,font='Helvetica 16 bold',bg=random.choice(colorArray))
        self.WidgetName.pack(fill=X)

        self.temperatureSliderLabel = Label(widgetTop,text="Temperature (°C)",bg="white")
        self.temperatureSliderLabel.pack()

        self.temperatureSlider = Scale(widgetTop,orient=HORIZONTAL,length=250,from_=0,to=40,bg="white")
        self.temperatureSlider.pack()

        self.lightSliderLabel = Label(widgetTop,text="Light Intensity (%)",bg="white")
        self.lightSliderLabel.pack()

        self.lightSlider = Scale(widgetTop,bg="white")
        self.lightSlider.pack()

        self.maxRolloutPositionLabel = Label(widgetTop,text="Rolling distance (cm): ",bg="white")
        self.maxRolloutPositionLabel.pack()

        self.maxRolloutEntry = Entry(widgetTop,bg="white")
        self.maxRolloutEntry.pack(side=LEFT)

        self.submitFormButton = Button(widgetTop,text="Submit",command=self.setSensors,bg="white")
        self.submitFormButton.pack(side=LEFT)

        self.openSunblindButton = Button(widgetcenter,text="Open sunblind",command=self.openSunblind,state=NORMAL,bg="#28a745",fg="white")
        self.openSunblindButton.pack(side=LEFT)

        self.closeSunblindButton = Button(widgetcenter,text="Close sunblind",command=self.closeSunblind,bg="#dc3545",fg="white")
        self.closeSunblindButton.pack(side=LEFT)

        self.setSunblindStatusButton = Button(widgetcenter,text="Automatic",command=self.setSunblindStatus,bg="#6c757d",fg="white")
        self.setSunblindStatusButton.pack(side=LEFT)

        self.sunblindFrame = Frame(widgetBottom,bg="white")
        self.sunblindFrame.pack(fill=X)

        self.sunblindStatusLabel = Label(self.sunblindFrame,text="Sunblind status:",bg="white",anchor="w")
        self.sunblindStatusLabel.pack(side=LEFT,pady=5)
        self.sunblindStatus = Label(self.sunblindFrame,text="Manual",bg="white")
        self.sunblindStatus.pack(side=RIGHT,pady=5)

        self.temperatureFrame = Frame(widgetBottom,bg="white")
        self.temperatureFrame.pack(fill=X)

        self.temperatureValueLabel = Label(self.temperatureFrame,text="Temperature: ",justify=LEFT,anchor="w")
        self.temperatureValueLabel.pack(side=LEFT,pady=5)
        self.temperatureValue = Label(self.temperatureFrame,text="",bg="white")
        self.temperatureValue.pack(side=RIGHT,pady=5)

        self.lightSliderFrame = Frame(widgetBottom,bg="white")
        self.lightSliderFrame.pack(fill=X)

        self.lightSliderValueLabel = Label(self.lightSliderFrame,text="Light Intensity: ",anchor="w")
        self.lightSliderValueLabel.pack(side=LEFT,pady=5)
        self.lightSliderValue = Label(self.lightSliderFrame,bg="white")
        self.lightSliderValue.pack(side=RIGHT,pady=5)

        self.rolloutFrame = Frame(widgetBottom,bg="white")
        self.rolloutFrame.pack(fill=X)

        self.rolloutLabel = Label(self.rolloutFrame,text="Roll-out position: ",anchor="w")
        self.rolloutLabel.pack(side=LEFT,pady=5)
        self.rolloutvalue = Label(self.rolloutFrame,bg="white")
        self.rolloutvalue.pack(side=RIGHT,pady=5)

        self.variable = StringVar(widgetBottom)
        self.variable.set(self.name)
        self.chooseArduino = Optionmenu(widgetBottom,self.variable,"Living Room","Bedroom","Study","Sex Dungeon","Bingo club")
        self.chooseArduino.pack()

        self.setNameButton = Button(widgetBottom,text="Set name",command=self.setarduinoName)
        self.setNameButton.pack()

    def setSensors(self):
        print("Set the temperature and light of the sensors")
        self.temperatureValue.config(text=str(self.temperatureSlider.get()) + "°C")
        self.temperature = self.temperatureSlider.get()
        self.lightSliderValue.config(text=str(self.lightSlider.get()))
        self.lightIntensity = self.lightSlider.get()
        self.maxRolloutPositionLabel.config(text="Rolling distance (cm): " + str(self.maxRolloutEntry.get()))

    def setName(self,widgetName):
        self.widgetName = widgetName

    def openSunblind(self):
        print("Set the sunblind to an open state")
        self.rolloutvalue.config(text="Rolled out")

    def closeSunblind(self):
        print("Set the sunblind to an closed state")
        self.rolloutvalue.config(text="Rolled in")

    def setSunblindStatus(self):
        if self.setSunblindStatusButton.config('text')[-1] == 'Automatic':
            self.openSunblindButton.config(state=DISABLED)
            self.closeSunblindButton.config(state=DISABLED)
            self.setSunblindStatusButton.config(text='Manual')
            print("Sunblind is set to: " + self.setSunblindStatusButton['text'])
            self.sunblindStatus.config(text="Automatic")
        else:
            self.openSunblindButton.config(state=NORMAL)
            self.closeSunblindButton.config(state=NORMAL)
            self.setSunblindStatusButton.config(text='Automatic')
            print("Sunblind is set to: " + self.setSunblindStatusButton['text'])
            self.sunblindStatus.config(text="Manual")


    def setarduinoName(self):
        self.WidgetName.config(text=self.variable.get())


    def getTemperature(self):
        return self.temperature

    def getLightIntensity(self):
        return self.lightIntensity


Arduino1 = Widget(root,"Arduino 1")
Arduino2 = Widget(root,"Arduino 2")
Arduino3 = Widget(root,"Arduino 3")
Arduino4 = Widget(root,"Arduino 4")
Arduino5 = Widget(root,"Arduino 5")
Widgets.append(Arduino1)
Widgets.append(Arduino2)
Widgets.append(Arduino3)
Widgets.append(Arduino4)
Widgets.append(Arduino5)
Visueel = GUI(Widgets,root)

root.mainloop()

图片

Python-更新GUI,因此它始终使用更新后的列表

qqcoboo 回答:Python-更新GUI,因此它始终使用更新后的列表

您可以尝试类似

def removeWidget(self):
    widget = self.widgets.pop()
    widget.widgetFrame.pack_forget()
    print(self.widgets)
本文链接:https://www.f2er.com/3159695.html

大家都在问