Помощь!wxListCtrl не отображается правильно
Я программист, не являющийся GUI, который пытается написать простую (!) Программу с использованием wxPython.
Я прочитал все, что я могу в Интернете, но мое общее отсутствие опыта графического интерфейса, по-видимому, заставляет меня не видеть проблему.
В двух словах, я хочу иметь окно с wxNotebook с несколькими вкладками. На каждой вкладке, конечно же, будут свои дочерние виджеты. Я предполагаю наличие либо wxListCtrl (как в моем коде), либо, возможно, элемент управления wxGrid, а также несколько кнопок.
Вот мой класс «EmployeesPanel». Когда я запускаю это, я вижу крошечный квадрат, который должен представлять список, но для жизни я не могу понять, как сделать его правильным. Конечно, возможно, что я ухожу с базы в некоторых других областях.
Любая помощь относительно того, что я делаю неправильно, с благодарностью.
Вот код:
import wx
import sys
employees = [('Earl Boffo', 'Software'), ('Mildred Plotka', 'Software'), ('Sugar Kane', 'QA')]
classes = [('Python'), ('Java'), ('C#')]
class EmployeesPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
# create some sizers
mainSizer = wx.BoxSizer(wx.VERTICAL)
grid = wx.GridBagSizer(hgap=5, vgap=5)
#hSizer = wx.BoxSizer(wx.HORIZONTAL|wx.EXPAND)
hSizer = wx.BoxSizer(wx.HORIZONTAL)
panel = wx.Panel(self, -1)
self.list = wx.ListCtrl(panel, size=(100,100), style=wx.LC_REPORT)
self.list.InsertColumn(0, 'Name')
self.list.InsertColumn(1, 'Group')
for i in employees:
index = self.list.InsertStringItem(sys.maxint, i[0])
self.list.SetStringItem(index, 1, i[1])
# A button
self.button = wx.Button(self, label="Exit")
self.Bind(wx.EVT_BUTTON, self.OnClick,self.button)
self.list.Show(True)
# add the listctrl widget to the grid
grid.Add(self.list, pos=(0,0), flag=wx.EXPAND|wx.ALL)
# add the button to the grid
grid.Add(self.button, pos=(1,0))
# add a spacer to the sizer
grid.Add((10, 40), pos=(1,1))
# add grid to hSizer
hSizer.Add(grid, 0, wx.ALL, 5)
# add hSizer to main (v) sizer
mainSizer.Add(hSizer, 0, wx.ALL, 5)
self.SetSizerAndFit(mainSizer)
self.Show()
def EvtComboBox(self, event):
self.logger.AppendText('EvtComboBox: %s\n' % event.GetString())
def OnClick(self,event):
sys.exit(3)
app = wx.App(False)
frame = wx.Frame(None, title="Training Tracker", size=(700,500))
nb = wx.Notebook(frame)
nb.AddPage(EmployeesPanel(nb), "Employees")
frame.Show()
app.MainLoop()
Что произойдет, если добавить строку 'уверенность. Макет() 'после' self.SetSizerAndFit() '? Это, как правило, первое, что я стараюсь, когда проблема с wxPython. Это заставляет пересчитывать все величины. Кроме того, что, если вы только называете self.SetSizer() 'вместо' self.SetSizerAndFit() '? – acattle
Спасибо за ответ. Ни один из них не изменил поведение вообще. Я могу попробовать тот же пример, но с помощью элемента управления Grid, чтобы увидеть, как он изменяется, если вообще. – mitchmcc