wxpython: Как установить ширину и высоту wxnotebook?

#python #wxpython

#python #wxpython

Вопрос:

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

Пожалуйста, запустите следующий код, если вы не понимаете, что я имею в виду.

 import random
import wx


[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1LISTBOX1, 
] = [wx.NewId() for _init_ctrls in range(4)]
########################################################################
class TabPanel(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

        sampleList = ['0', '1', '2', '3', '4']
        listBox = wx.ListBox(self, -1, (20, 20), (80, 120), sampleList, wx.LB_SINGLE)
        listBox.SetSelection(3)
        #This is the button!!!!
        btn = wx.Button(self, label="Create new")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn,300,400, wx.ALL, 10)
        self.SetSizer(sizer)

########################################################################
class DemoFrame(wx.Frame):
    """
    Frame that holds all other widgets
    """

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "Notebook Tutorial",
                          size=(600,400)
                          )
        panel = wx.Panel(self)

        notebook = wx.Notebook(panel)
        tabOne = TabPanel(notebook)
        notebook.AddPage(tabOne, "things")

        tabTwo = TabPanel(notebook)
        notebook.AddPage(tabTwo, "other things")

        sizer = wx.BoxSizer(400)
        sizer.Add(notebook)
        panel.SetSizer(sizer)
                        #menu bar
        status=self.CreateStatusBar()
        menubar=wx.MenuBar()
        first=wx.Menu()
        second=wx.Menu()
        first.Append(wx.NewId(),"New","Creates A new file")
        first.Append(wx.NewId(),"ADID","Yo")
        menubar.Append(first,"File")
        menubar.Append(second,"Edit")
        self.SetMenuBar(menubar)
        self.Layout()

        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()
 

Большое вам спасибо за просмотр.

Ответ №1:

Попробуйте что-то вроде этого:

 COLORS = ["red", "blue", "black", "yellow", "green"]
NUMBERS = ['0', '1', '2', '3', '4']
PANELS = ["Things", "More things", "Ultra!"]

import random
import wx

class TabPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.SetBackgroundColour(random.choice(COLORS))
        self.listBox = wx.ListBox(self, size=(200, -1), choices=NUMBERS, style=wx.LB_SINGLE)
#        self.button = wx.Button(self, label="Something else here? Maybe!")

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.listBox, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
#        self.sizer.Add(self.button, proportion=1, flag=wx.ALL)

        self.SetSizer(self.sizer)


class MyNotebook(wx.Notebook):
    def __init__(self, *args, **kwargs):
        wx.Notebook.__init__(self, *args, **kwargs)

        self.panels = []
        for name in PANELS:
            panel = TabPanel(self)
            self.panels.append(panel)
            self.AddPage(panel, name)


class MyPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)

        self.notebook = MyNotebook(self, size=(400, -1))
#        self.button = wx.Button(self, label="Something else here? Maybe!")

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.notebook, proportion=0, flag=wx.EXPAND)
#        self.sizer.Add(self.button, proportion=0)
        self.SetSizer(self.sizer)


class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.panel = MyPanel(self)

        self.status = self.CreateStatusBar()

        self.menubar = wx.MenuBar()
        first=wx.Menu()
        second=wx.Menu()
        first.Append(wx.NewId(), "New", "Creates A new file")
        first.Append(wx.NewId(), "ADID", "Yo")
        self.menubar.Append(first, "File")
        self.menubar.Append(second, "Edit")
        self.SetMenuBar(self.menubar)

        self.Show()


app = wx.App(False)
win = MainWindow(None, size=(600, 400))
app.MainLoop()
 

Раскомментируйте кнопки, чтобы увидеть, как вы можете добавить больше материала. В моем коде вы можете найти несколько полезных советов по программированию на wxPython. Мне лень все описывать ;-).

Комментарии:

1. Спасибо, но я хотел, чтобы он был установлен на определенную ширину, однако он автоматически переходит на ширину окна

2. @user1008537 — Обновлено с фиксированной шириной. Однако обычно рекомендуется иметь как можно меньше фиксированных размеров и использовать сайзеры для автоматической компоновки. Таким образом, ваше приложение не будет прерываться при изменении общесистемных параметров, таких как размер шрифта и т. Д.

3. Знаете ли вы, есть ли способ узнать, какая вкладка открыта

4. Привязать событие изменения страницы: self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)