2015-05-30 3 views
0

Я пытаюсь центрировать wx.grid.Grid в wxPython. Я пробовал все возможные комбинации параметра ID 1,0, -1. Я попытался добавить wx.ALIGN_CENTER_HORIZONTAL во многие sizers. Я работаю над этим в течение нескольких дней, любая помощь будет очень признательна.Как центрировать wx.Grid в wxPython

Мой вопрос: «Как мне центрировать мой wxgrid?»

Вот мой код:

main.py

import wx 
from LogView import LogView 

class MyFrame(wx.Frame): 
    """ We simply derive a new class of Frame. """ 
    def __init__(self, parent, ID, title): 
     wx.Frame.__init__(self, parent, ID, title=title, size=(850,725)) 

     self.main = wx.Panel(self) 

     self.nb = wx.Notebook(self.main, 1) 
     self.logView = LogView(parent=self.nb, ID=-1) 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 

     self.nb.AddPage(self.logView, "Log") 

     # Create sizers 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 

     # Adding Objects to mainSizer 
     self.mainSizer.AddSpacer(10) 
     self.mainSizer.Add(self.nb, 1, wx.ALL|wx.EXPAND) 

     # Set main sizer 
     self.main.SetAutoLayout(True) 
     self.main.SetSizer(self.mainSizer) 
     self.mainSizer.Fit(self.main) 
     self.Layout() 
     self.Centre(wx.BOTH) 
     self.Show() 

app = wx.App(False) 
frame = MyFrame(None, -1, 'TFM UI') 
app.MainLoop() 

LogView.py

import wx 
from GridTable import GridTable 
class LogView(wx.Panel): 
    def __init__(self, parent, ID): 
     wx.Panel.__init__(self, parent, ID) 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 

     self.gridPnl = wx.Panel(self) 
     self.gridPnlSizer = wx.BoxSizer(wx.VERTICAL) 

     self.grid = GridTable(self.gridPnl) 

     self.gridPnlSizer.AddStretchSpacer() 
     self.gridPnlSizer.Add(self.grid,-1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL) 
     self.gridPnlSizer.AddStretchSpacer() 

     self.gridPnl.SetAutoLayout(True) 
     self.gridPnl.SetSizer(self.gridPnlSizer) 
     self.gridPnlSizer.Fit(self.gridPnl) 

     self.sizer.AddSpacer(25) 
     self.sizer.Add(self.gridPnl,-1,wx.EXPAND) 


     self.SetAutoLayout(True) 
     self.SetSizer(self.sizer) 
     self.sizer.Fit(self) 

GridTable.py

import wx 
import wx.grid 

class GridTable(wx.grid.Grid): 
    def __init__(self, parent): 
     #colDisplay should be a list 

     wx.grid.Grid.__init__(self, parent) 
     self.CreateGrid(100,3) 
     for i in xrange(3): 
      if i==0: 
       self.SetColLabelValue(i, "Col"+str(i)) 
       self.SetColSize(i,85) 
      else: 
       self.SetColLabelValue(i, "Col"+str(i)) 
       self.SetColSize(i,150) 


     for i in xrange(100): 
      #clear grid 
      self.SetRowLabelValue(i, str(i+1)) 
      for j in xrange(3): 
       self.SetCellValue(i,j,"") 
       if i==0: 
        self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
       elif i%2==0: 
        self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
       else: 
        self.SetCellTextColour(i, j, wx.BLACK) 
        self.SetCellBackgroundColour(i, j, wx.WHITE) 

     for i in xrange(100): 
      if i==0: 
       for j in xrange(3): 
        if j == 0: 
         self.SetRowLabelValue(i, str(i+1)) 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
        else: 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
      elif i%2==0: 
       for j in xrange(3): 
        if j == 0: 
         self.SetRowLabelValue(i, str(i+1)) 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
        else: 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellBackgroundColour(i, j, wx.LIGHT_GREY) 
      else: 
       for j in xrange(3): 
        if j == 0: 
         self.SetRowLabelValue(i, str(i+1)) 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellTextColour(i, j, wx.BLACK) 
         self.SetCellBackgroundColour(i, j, wx.WHITE) 
        else: 
         self.SetCellValue(i,j,str("Col"+str(j))) 
         self.SetCellTextColour(i, j, wx.BLACK) 
         self.SetCellBackgroundColour(i, j, wx.WHITE) 
+0

От запуска кода я не понимаю, что вы пытаетесь достичь. Как должно выглядеть вертикальное центрирование? Или вы имели в виду горизонтальный? – Anna

+0

Пожалуйста, взгляните на мое редактирование. Я хотел сказать центр по горизонтали ... wx.ALIGN_CENTER_HORIZONTAL. Я хочу, чтобы self.grid был центрирован по горизонтали на self.gridPnl. Спасибо за ваш ответ. – user908759

ответ

0

Глядя на этой линии от LogView. py:

self.gridPnlSizer.Add(self.grid,-1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL) 

Для начала вы являетесь using a proportion of -1, что, я думаю, не определено. Это заставляет Python рушиться на моей машине, так что ... это не здорово. Значение по умолчанию 0.

Во-вторых, вы сообщаете sizer о расширении виджета. Я предполагаю, что если виджет занимает все свободное пространство, это, безусловно, связано с одним определением, но я не думаю, что это то, что вы имеете в виду.

И, наконец, растягивающие прокладки не нужны. Так заменить этот блок из трех линий с:

self.gridPnlSizer.Add(self.grid,flag=wx.ALIGN_CENTER_HORIZONTAL) 

Когда я делаю это, я в конечном итоге с:

enter image description here

+0

Причина, по которой я добавил расширение, - это удалить горизонтальную полосу прокрутки в нижней части сетки. Ваш код сосредоточился на сетке, но добавил горизонтальную полосу прокрутки в нижней части сетки. – user908759

+0

О, так вам также нужен код, чтобы сделать некоторые другие вещи, которые вы не упомянули? Отлично. –

+0

Мне также нужны строки, чтобы оставаться пронумерованными, но я тоже не упоминал об этом. Спасибо за вашу помощь. – user908759

 Смежные вопросы

  • Нет связанных вопросов^_^