Wxpython очистить виджеты и создать новый макет - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь сделать простую игру, используя Wxpyhon.Первый макет "Добро пожаловать!"макет, где пользователи нажимают кнопку виджета «Давайте начнем! -», чтобы продолжить.Я хочу, чтобы на втором макете пользователи вводили свое имя.

Как мне изменить первый макет на второй (сбросить на новый макет)?Я разрушаю Кадр или я разрушаю Панель?Я хочу, чтобы оба макета находились в одном и том же окне с одинаковым размером, одинаковым точным положением и т. Д. Если бы мне пришлось уничтожить фрейм, придется ли мне снова выполнять сброс и вводить размер, положение и т. Д.?Есть ли способ сделать это без использования виджета Hide (), WizardPage или AddPage?

Я подумал о создании класса или функции, которая специально создает новый фрейм или панель каждый раз, когда предыдущий был уничтожен, поэтому я бы не сталМне не нужно снова набирать размеры и позиции, но я не думаю, что эта идея сработает.

Я очень новичок в Wxpython и Python, потому что я только начал Python больше илименьше месяца назад, и я только что изучил WxPython около недели.Я искал учебники, чтобы помочь мне решить эту проблему, но я все еще не понимаю, что добавить в мой код.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

Вам, вероятно, не нужно ничего разрушать.Вы можете просто скрыть и показать панели по мере необходимости.У меня есть пример переключения между панелями в моем блоге .Вот код:

import wx
import wx.grid as gridlib


class PanelOne(wx.Panel):
    """"""

    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        txt = wx.TextCtrl(self)


class PanelTwo(wx.Panel):
    """"""

    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)

        grid = gridlib.Grid(self)
        grid.CreateGrid(25,12)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(grid, 0, wx.EXPAND)
        self.SetSizer(sizer)


class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "Panel Switcher Tutorial")

        self.panel_one = PanelOne(self)
        self.panel_two = PanelTwo(self)
        self.panel_two.Hide()

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.panel_one, 1, wx.EXPAND)
        self.sizer.Add(self.panel_two, 1, wx.EXPAND)
        self.SetSizer(self.sizer)


        menubar = wx.MenuBar()
        fileMenu = wx.Menu()
        switch_panels_menu_item = fileMenu.Append(wx.ID_ANY, 
                                                  "Switch Panels", 
                                                  "Some text")
        self.Bind(wx.EVT_MENU, self.onSwitchPanels, 
                  switch_panels_menu_item)
        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)

    def onSwitchPanels(self, event):
        """"""
        if self.panel_one.IsShown():
            self.SetTitle("Panel Two Showing")
            self.panel_one.Hide()
            self.panel_two.Show()
        else:
            self.SetTitle("Panel One Showing")
            self.panel_one.Show()
            self.panel_two.Hide()
        self.Layout()


# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

Вы можете сделать то же самое с вашим приложением.

...