好吧,這裏是我得到了它的工作像我想要的。
完整代碼窗口:
class ListView(wx.Frame):
def __init__(self, parent, id) :
wx.Frame.__init__(self, wx.GetApp().TopWindow, title='Studenten Liste', size=(890, 740))
self.panel = wx.Panel(self)
# Font Mods
font_underline = wx.Font(9, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, True)
# Grid Sizer
self.sizer_grid = grid = wx.GridBagSizer(5,5)
# Row 0, Col 0+1
self.label_auswahl = wx.StaticText(self.panel, label="Auswahl:")
self.label_auswahl.SetFont(font_underline)
grid.Add(self.label_auswahl, (0,0), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL)
init_choice = ['TEMP1','TEMP2','TEMP3','TEMP4']
self.input_auswahl = TextCtrlAutoComplete(self.panel, size=(280,24), choices=init_choice, showHead=False)
grid.Add(self.input_auswahl, (0,1), (1,4), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
# Row 0, Col 9,10,11
self.label_kat = wx.StaticText(self.panel, label="Kategorie:")
self.label_kat.SetFont(font_underline)
grid.Add(self.label_kat, (0,9), flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
kategorie_ch = ['Demo1', 'Demo2', 'Demo3']
self.ch_kategorie = wx.Choice(self.panel, choices=kategorie_ch)
self.ch_kategorie.db_name = 'kategorie'
self.ch_kategorie.Bind(wx.EVT_CHOICE, self.OnKatChoice)
grid.Add(self.ch_kategorie, (0,10), (1,2), flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
#Row 1, Col 0-12 - Ultimate List Ctrl
self.list = ulc = UltimateLC(self.panel, 12)
# Give it some columns.
# The ID col we'll customize a bit:
ulc.InsertColumn(0, 'Name:', width=120)
ulc.InsertColumn(1, 'Vorname:', width=120)
ulc.InsertColumn(2, 'Anschrift:', width=160)
ulc.InsertColumn(3, 'Telefon:', width=100)
ulc.InsertColumn(4, 'eMail:', width=200)
ulc.InsertColumn(5, 'Studium:', format=ULC.ULC_FORMAT_CENTER, width=60)
ulc.InsertColumn(6, 'Matr. Nr.:', format=ULC.ULC_FORMAT_CENTER, width=70)
ulc.InsertColumn(7, 'Hauptfach:', width=100)
ulc.InsertColumn(8, 'Nebenfach:', width=100)
ulc.InsertColumn(9, 'Start Sem.:', width=70)
ulc.InsertColumn(10, 'Letzte Akt.:', width=70)
ulc.InsertColumn(11, 'Kategorie:', width=70)
grid.Add(self.list, (1,0), (1,12), flag=wx.EXPAND)
# Row 2+3
self.label_sel = wx.StaticText(self.panel, label='Daten Drucken:')
grid.Add(self.label_sel, (2,0), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
# DICT Print Selection
self.SelectDefs = SelectDefs = {
# ID: (Label, Header Name, DB Name, Column Width
101 : ('Name', 'Name:', 'name', 0.9),
102 : ('Vorame', 'Vorname:', 'vorname', 0.85),
103 : ('Anschrift', 'Anschrift:', 'anschrift', 1.4),
104 : ('Telefon', 'Telefon:', 'tele', 0.9),
105 : ('eMail', 'eMail:', 'email', 1.65),
106 : ('Studium', '', 'studium', 0.31),
107 : ('Matrikel', 'Matrikel:', 'matrikel', 0.6),
108 : ('Hauptfach', 'Haupftach:', 'hauptf', 0.9),
109 : ('Nebenfach', 'Nebenfach:', 'nebenf', 0.9),
110 : ('Start Sem.', 'Start:', 'startsem', 0.6),
111 : ('Letzte Akt.', 'Last:', 'lastakt', 0.6),
112 : ('Kategorie', '', 'kategorie', 0.5),
}
# Max Width for Portrait or Landscape printout
self.max_portrait = 7.8
self.max_landscape = 10.11
keys = SelectDefs.keys()
for i,k in enumerate(keys):
col = i + 1
row = 2
if i > 5:
col = i - 5
row = 3
label = SelectDefs[k][0]
chk = wx.CheckBox(self.panel, k, label)
grid.Add(chk, (row,col), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
self.Bind(wx.EVT_CHECKBOX, self.OnCheckBox, chk)
self.button_print_sel = wx.Button(self.panel, 201, label="Auswahl Drucken")
self.button_print_sel.Bind(wx.EVT_BUTTON, self.OnPrint)
self.button_print_all = wx.Button(self.panel, 202, label="Liste Drucken")
self.button_print_all.Bind(wx.EVT_BUTTON, self.OnPrint)
grid.Add(self.button_print_sel, (2,10), (2,1), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
grid.Add(self.button_print_all, (2,11), (2,1), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
# Column 8 will Expand, Column 8 only holds the ListCtrl
grid.AddGrowableCol(8)
# Row 1 will Expand, Row 1 only holds the ListCtrl
grid.AddGrowableRow(1)
# List Binds
self.list.Bind(ULC.EVT_LIST_ITEM_CHECKED, self.OnCheck)
self.list.Bind(ULC.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
# Lists for the Checked Items
self.checked_ids = []
self.checked_sel = []
# Set Defaults
self.SetDefaults()
# Set Min Windows Size
self.SetMinSize((890, 540))
# Main Sizer
self.sizer_v = wx.BoxSizer(wx.VERTICAL)
self.sizer_v.Add(grid, 1, wx.ALL | wx.EXPAND, 5)
self.panel.SetSizerAndFit(self.sizer_v)
重要的部分是:
當添加列表設置標誌:wx.EXPAND
將所有列和行你想用SetGrowable進行伸展。在我的例子中,我只希望列表垂直和水平調整大小,所以我只設置行和列可擴展,這是唯一持有列表的列。 有了這個所有其他元素保持在他們的位置,它是在左邊還是右邊。
最後將所有內容添加到比例= 1且樣式爲wx.EXPAND的垂直Boxsizer中。比例1允許垂直拉伸並且wx.EXPAND水平。我猜你可以用水平boxsizer做同樣的事情。 最後的wx.ALL和',5'僅在GridBagSizer周圍設置了一個邊界,它看起來更加美觀。
PS: 上面的代碼需要一些函數和不包含的自定義小部件。
UltimaListCtrl(用分揀機密新):
self.list = ulc = UltimateLC(self.panel, 12)
可以替換:
self.list = list = wx.ListCtrl(self.panel, ...)
TextCtrlAutoComplete:
init_choice = ['TEMP1','TEMP2','TEMP3','TEMP4']
self.input_auswahl = TextCtrlAutoComplete(self.panel, size=(280,24), choices=init_choice, showHead=False)
其可以被移除或更換。
而且,增加了數據和預選一些複選框功能:
self.SetDefaults()
這一個可以移除。
你能提供一個小的可運行示例嗎? – GP89
我仍然需要學習清理我的代碼......我只是發佈了這個代碼片段,因爲它的其他東西依賴於數據庫和其他數據...但我設法通過將GridBagSizer放入Boxsizer中來自行修復它(垂直)。當我回家時,我會發布我的解決方案。 – Sonic