Как обновить класс Grid в wxpython? - PullRequest
0 голосов
/ 21 мая 2019

В настоящее время я создаю программу, которая настраивает IP-соединения, когда я наткнулся на проблему с обновлением данных в Grid, поскольку я создал класс Grid, который содержал SQL-запросы, которые выполняются после загрузки этого класса,Упомянутая функция обновления должна быть выполнена с помощью кнопки «Удалить» или «Изменить».

Я попытался использовать ForceRefresh для класса сетки, очистив данные, затем обновив и открыв и закрыв окно в целом.2 из которых не сработали, а последний просто не загрузит новые данные.

class MainTable(wx.grid.Grid):
    def __init__(self, parent):
        wx.grid.Grid.__init__(self, parent, -1)
#Insert functions and SQL queries...

class dspdtb(wx.Frame):
    def __init__(self, title, parent=None, style = wx.MINIMIZE_BOX | wx.MAXIMIZE | wx.SYSTEM_MENU | wx.RESIZE_BORDER | wx.CLOSE_BOX | wx.CAPTION | wx.TRANSPARENT_WINDOW):
        wx.Frame.__init__(self, parent=parent, title=title)
#More stuff below...


        btn2 = BP.ButtonInfo(titleBar, wx.ID_ANY, wx.Bitmap("button5 a.png", wx.BITMAP_TYPE_PNG))
        titleBar.AddButton(btn2)
        btn2.SetBitmap(wx.Bitmap("button5 b.png", wx.BITMAP_TYPE_PNG), status="Pressed")
        self.Bind(wx.EVT_BUTTON, self.Removal, btn2)

#Still more stuff below...

        grid = MainTable(panel)
        vSizer.Add(titleBar, 0, wx.EXPAND)
        vSizer.Add((20, 20))
        vSizer.Add(grid, 0, wx.ALL | wx.CENTRE, 50)
        titleBar.DoLayout()
        vSizer.Layout()
        #toolbar end
        self.Show()
        self.Maximize(True)

#Insert other functions here...

    def Removal(self, event):
        global l_a
        t = len(l_a)
        n = 0
        chk = wx.MessageBox('Do you wanna delete the selected items?', 'Confirm Deletion', wx.YES_NO)
        if chk==2:
            while(n<t):
                sasa = l_a[n]
                print (sasa)
                try: 
                    mycursor.execute("DELETE FROM ip_config WHERE id=%s;", (sasa,))
                except mysql.connector.Error as err:
                    print("Something went wrong: {}".format(err))
                mydb.commit()
                n+=1
            wx.MessageBox('Rows now deleted, the table will now reload.', 'Deletion Completed', wx.OK)
        l_a=[]
        MainTable.ForceRefresh()

Мне нужно, чтобы Программа обновляла либо класс dspdtb, либо класс Grid для обновления данных.Но когда я выполнил программу, это происходит:

Traceback (most recent call last):
  File "C:\Users\Internal_IT\Desktop\IP automation\wxt.py", line 332, in Removal
    MainTable.ForceRefresh()
TypeError: Grid.ForceRefresh(): first argument of unbound method must have type 'Grid'

Любая помощь приветствуется.Заранее спасибо!

1 Ответ

0 голосов
/ 21 мая 2019

Насколько я понимаю, проблема должна заключаться в том, что вы создаете объект MainTable в своем классе.

grid = MainTable(panel)

Затем в методе Removal вы хотите вызвать метод ForceRefresh из класса MainTable., вот так.

MainTable.ForceRefresh()

Возможно, вам следует вызвать этот метод для самого объекта MainTable, например, так.

self.grid.ForceRefresh()

Перед тем, как сделать это, не забудьте создать сеткукак переменная экземпляра с self, как это.

self.grid = MainTable(panel)

Дайте мне знать, если это помогло.

...