#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)