3

パネル内で「テーブル」の見栄えを良くしようとしています。私が抱えているこの問題は、テーブルがパネルを埋め尽くしているが、すべてが左側にあるということです。各列を同じサイズにして、パネルの幅全体に広げたいと思います。ListCtrlAutoWidthMixin を見たことがありますが、これをどのように利用できるかわかりません。これが私がコードに持っているものです:

        self.Analysis = scrolled.ScrolledPanel(self.Notebook3, -1)

        # Set Up Analysis Page (Page has four panels -- I care about Top left one)
        self.AnalysisUL = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
        self.AnalysisUR = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
        self.AnalysisLL = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
        self.AnalysisLR = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)

        # Top Left Box (Analyze Button and Projected Points Total)
        self.Picks_Left = wx.ListCtrl(self.AnalysisUL,-1,style=wx.LC_REPORT | wx.BORDER_NONE)
        self.Picks_Left.InsertColumn(1,'col1')
        self.Picks_Left.InsertColumn(2,'col2',format=wx.LIST_FORMAT_CENTRE)
        self.Picks_Left.InsertColumn(3,'col3',format=wx.LIST_FORMAT_CENTRE)
        self.Picks_Left.InsertColumn(4,'col4',format=wx.LIST_FORMAT_CENTRE)

        self.Picks_Left.SetColumnWidth(0,-2)
        self.Picks_Left.SetColumnWidth(1,-2)
        self.Picks_Left.SetColumnWidth(2,-2)
        self.Picks_Left.SetColumnWidth(3,-2)

        # Sizer
        vbox_UL = wx.BoxSizer(wx.VERTICAL)

        #Title for Table
        fontUL = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
        self.UL_text = wx.StaticText(self.AnalysisUL, -1, 'Title')
        self.UL_text.SetFont(fontUL)

        vbox_UL.Add(self.UL_text, 0, wx.CENTER|wx.ALL,20)
        vbox_UL.Add(self.Picks_Left,1,wx.EXPAND|wx.ALL,3)
        self.AnalysisUL.SetSizer(vbox_UL)

繰り返しますが、テーブルはパネル全体にまたがっていますが、すべての列が左にシフトしています。また、列のサイズを手動で設定したくありません (パネルのサイズを取得して、列の数で割ることができない限り、プログラムは異なる解像度のコンピューターで使用されるため)。このアプローチを試しましたが、パネルの正しいサイズを取得できないようです。GetSize() と GetClientSize() で取得した数値はすべて小さすぎます。

助けてくれてありがとう!

編集:追加されたコード:

import wx
import wx.lib.mixins.listctrl as listmix
import wx.lib.scrolledpanel as scrolled
import wx.lib.agw.pybusyinfo as PBI

class TMainForm(wx.Frame):

    def __init__(self, *args, **kwds):


            kwds["style"] = wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER
            wx.Frame.__init__(self, *args, **kwds)

            self.Splitter1 = wx.SplitterWindow(self, -1)#, style=wx.SP_NOSASH)
            self.Splitter2 = wx.SplitterWindow(self.Splitter1)

            self.Panel1 = wx.Panel(self.Splitter2, -1)
            self.Panel2 = wx.Panel(self.Splitter2, -1)

            self.Splitter2.SplitHorizontally(self.Panel1,self.Panel2)

            self.Panel3 = wx.Panel(self.Splitter1, -1)
            self.Splitter1.SplitVertically(self.Splitter2,self.Panel3,400)

            self.Notebook = wx.Notebook(self.Panel1, -1)
            self.MyTeam = scrolled.ScrolledPanel(self.Notebook, -1)
            self.TeamComparison = scrolled.ScrolledPanel(self.Notebook, -1)

            self.MyTeam.SetupScrolling()
            self.TeamComparison.SetupScrolling()

            self.Notebook3 = wx.Notebook(self.Panel3, -1)
            self.Analysis = scrolled.ScrolledPanel(self.Notebook3, -1)

            self.Analysis.SetupScrolling()

            self.AnalysisUL = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
            self.AnalysisUR = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
            self.AnalysisLL = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)
            self.AnalysisLR = wx.Panel(self.Analysis,-1, style=wx.BORDER_NONE)

            # Top Left Box (To Fix!)
            self.Picks_Left = wx.ListCtrl(self.AnalysisUL,-1,style=wx.LC_REPORT | wx.BORDER_NONE)
            self.Picks_Left.InsertColumn(1,'                  ')
            self.Picks_Left.InsertColumn(2,'    ',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(3,'H1',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(4,'H2',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(5,'H#',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(6,'H4',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(7,'H5',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(8,'H6',format=wx.LIST_FORMAT_CENTRE)
            self.Picks_Left.InsertColumn(9,'H7',format=wx.LIST_FORMAT_CENTRE)

##            table_width = self.Picks_Left.GetSize()[0] #GetSize returns (width, height) tuple
##            print table_width
##            num_col = self.Picks_Left.GetColumnCount()
##            col_width = table_width/num_col
##            for i in range(0, num_col):
##                self.Picks_Left.SetColumnWidth(i, col_width)

            self.Picks_Left.SetColumnWidth(0,-2)
            self.Picks_Left.SetColumnWidth(1,-2)
            self.Picks_Left.SetColumnWidth(2,-2)
            self.Picks_Left.SetColumnWidth(3,-2)
            self.Picks_Left.SetColumnWidth(4,-2)
            self.Picks_Left.SetColumnWidth(5,-2)
            self.Picks_Left.SetColumnWidth(6,-2)
            self.Picks_Left.SetColumnWidth(7,-2)
            self.Picks_Left.SetColumnWidth(8,-2)            

            # Bottom Left Box (Suggested Optimal Teams)
            self.Notebook_AltTeams = wx.Notebook(self.AnalysisLL, -1)
            self.Alt_Team_1 = scrolled.ScrolledPanel(self.Notebook_AltTeams, -1)
            self.Alt_Team_2 = scrolled.ScrolledPanel(self.Notebook_AltTeams, -1)
            self.Alt_Team_3 = scrolled.ScrolledPanel(self.Notebook_AltTeams, -1)
            self.Alt_Team_4 = scrolled.ScrolledPanel(self.Notebook_AltTeams, -1)
            self.Alt_Team_5 = scrolled.ScrolledPanel(self.Notebook_AltTeams, -1)

            self.Alt_Team_1.SetupScrolling()
            self.Alt_Team_2.SetupScrolling()
            self.Alt_Team_3.SetupScrolling()
            self.Alt_Team_4.SetupScrolling()
            self.Alt_Team_5.SetupScrolling()

            # Menu Bar
            self.MainMenu = wx.MenuBar()
            self.FileMenu = wx.Menu()

            self.FileOpenItem = wx.MenuItem(self.FileMenu, 103, "&Open\tCtrl+O", "Open a Previous Session", wx.ITEM_NORMAL)
            self.FileMenu.AppendItem(self.FileOpenItem)
            self.FileReloadItem = wx.MenuItem(self.FileMenu, 104, "&Reload Defaults", "Reload Default Files", wx.ITEM_NORMAL)
            self.FileMenu.AppendItem(self.FileReloadItem)
            self.FileSaveItem = wx.MenuItem(self.FileMenu, 102, "&Save\tCtrl+S", "Save the data", wx.ITEM_NORMAL)
            self.FileMenu.AppendItem(self.FileSaveItem)
            self.FileQuitItem = wx.MenuItem(self.FileMenu, wx.ID_EXIT, "&Quit\tCtrl+Q", "Quit the program", wx.ITEM_NORMAL)
            self.FileMenu.AppendItem(self.FileQuitItem)          
            self.MainMenu.Append(self.FileMenu, "&File")

            self.SetMenuBar(self.MainMenu)
            # Menu Bar end

            self.StatusBar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)

            self.__set_properties()
            self.__do_layout()

            self.Bind(wx.EVT_MENU, self.OnFileQuit, self.FileQuitItem)
            self.Bind(wx.EVT_MENU, self.OnFileSave, self.FileSaveItem)
            self.Bind(wx.EVT_MENU, self.OnFileOpen, self.FileOpenItem)
            self.Bind(wx.EVT_MENU, self.OnFileReload, self.FileReloadItem)

            self.OnAnalyze()


    def __set_properties(self): #Set up GUI Title and Map Window

            self.SetTitle("Test")
            screen_x = 95 * wx.GetDisplaySize()[0]/100
            screen_y = 90 * wx.GetDisplaySize()[1]/100
            self.SetSize((screen_x, screen_y))

            self.SetFocus()

    def __do_layout(self , call_fit = True, set_sizer = True): #Create Lay-Out of GUI

            # Sizer for Panel 3 (Analysis Page)
            hbox  = wx.BoxSizer(wx.HORIZONTAL)

            vbox1 = wx.BoxSizer(wx.VERTICAL)
            vbox2 = wx.BoxSizer(wx.VERTICAL)

            hbox2 = wx.BoxSizer(wx.HORIZONTAL)

            vbox1.Add(self.AnalysisUL, 1, wx.EXPAND | wx.ALL, 3)
            vbox1.Add(self.AnalysisLL, 1, wx.EXPAND | wx.ALL, 3)
            vbox2.Add(self.AnalysisUR, 1, wx.EXPAND | wx.ALL, 3)
            vbox2.Add(self.AnalysisLR, 1, wx.EXPAND | wx.ALL, 3)

            # Analysis Button Panel
            vbox_UL = wx.BoxSizer(wx.VERTICAL)
            vbox_UL3 = wx.BoxSizer(wx.HORIZONTAL)

            fontUL = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
            self.UL_text = wx.StaticText(self.AnalysisUL, -1, 'Title 1')
            self.UL_text.SetFont(fontUL)

            Exp_Pts = ' '

            fontUL = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
            self.ULText1 = wx.StaticText(self.AnalysisUL, -1, 'Title 2')
            self.ULText2 = wx.StaticText(self.AnalysisUL, -1, Exp_Pts)

            self.ULText1.SetFont(fontUL)
            self.ULText2.SetFont(fontUL)
            self.ULText2.SetForegroundColour((0,0,255))
            self.ULText1.SetForegroundColour((0,0,255))

            hbox2.Add(self.ULText1, 0)
            hbox2.Add(self.ULText2, 0)

            vbox_UL.Add(self.UL_text, 0, wx.CENTER|wx.ALL,20)
            vbox_UL.Add(self.Picks_Left,1,wx.EXPAND|wx.ALL,3)
            vbox_UL.Add(hbox2, 0, wx.CENTER|wx.BOTTOM,50)
            self.AnalysisUL.SetSizer(vbox_UL)

            # Suggested Pick Panel
            vbox_LR = wx.BoxSizer(wx.HORIZONTAL)
            vbox_LR2 = wx.BoxSizer(wx.VERTICAL)

            font2 = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)

            SuggestedSelection = ' '

            self.SuggestedText1 = wx.StaticText(self.AnalysisLR, -1, ' ')
            self.SuggestedText2 = wx.StaticText(self.AnalysisLR, -1, SuggestedSelection)

            self.SuggestedText1.SetFont(font2)
            self.SuggestedText2.SetFont(font2)
            self.SuggestedText2.SetForegroundColour((0,0,255))

            vbox_LR2.Add(self.SuggestedText1,0,wx.ALIGN_CENTRE)

            vbox_LR2.Add(wx.StaticText(self.AnalysisLR, -1, ''),0,wx.CENTER)
            vbox_LR2.Add(wx.StaticText(self.AnalysisLR, -1, ''),0,wx.CENTER)

            vbox_LR2.Add(self.SuggestedText2,0,wx.ALIGN_CENTRE)
            vbox_LR.Add(vbox_LR2,1,wx.CENTER)
            self.AnalysisLR.SetSizer(vbox_LR)

            # Projected Team Panel
            sizer_LL = wx.BoxSizer(wx.VERTICAL)
            self.Alt_Team_1.SetSizer(sizer_LL)

            sizer_LL = wx.BoxSizer(wx.VERTICAL)
            self.Alt_Team_2.SetSizer(sizer_LL)

            sizer_LL = wx.BoxSizer(wx.VERTICAL)
            self.Alt_Team_3.SetSizer(sizer_LL)

            sizer_LL = wx.BoxSizer(wx.VERTICAL)
            self.Alt_Team_4.SetSizer(sizer_LL)

            sizer_LL = wx.BoxSizer(wx.VERTICAL)
            self.Alt_Team_5.SetSizer(sizer_LL)

            # Picks Remaining Panel
            vbox_UR = wx.BoxSizer(wx.VERTICAL)

            fontUR = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
            self.UR_text = wx.StaticText(self.AnalysisUR, -1, 'Title')
            self.UR_text.SetFont(fontUR)

            vbox_UR.Add(self.UR_text, 0, wx.CENTER)
            self.AnalysisUR.SetSizer(vbox_UR)

            # Finish Analysis Sizers
            hbox.Add(vbox1, 1, wx.EXPAND)
            hbox.Add(vbox2, 1, wx.EXPAND)
            self.Analysis.SetSizer(hbox)

            # Add Notebook Pages
            self.Notebook.AddPage(self.MyTeam,"A")
            self.Notebook.AddPage(self.TeamComparison,"B")

            self.Notebook3.AddPage(self.Analysis,"CHECK ME")

            self.Notebook_AltTeams.AddPage(self.Alt_Team_1,"1")
            self.Notebook_AltTeams.AddPage(self.Alt_Team_2,"2")
            self.Notebook_AltTeams.AddPage(self.Alt_Team_3,"3")
            self.Notebook_AltTeams.AddPage(self.Alt_Team_4,"4")
            self.Notebook_AltTeams.AddPage(self.Alt_Team_5,"5")

            #Sizer for Panel 1
            sizer_P1 = wx.BoxSizer(wx.VERTICAL)
            sizer_P1.Add(self.Notebook, 1, wx.EXPAND, 0)
            self.Panel1.SetSizer(sizer_P1)

            #Sizer for Panel 3
            sizer_P3 = wx.BoxSizer(wx.VERTICAL)
            sizer_P3.Add(self.Notebook3, 1, wx.EXPAND, 0)
            self.Panel3.SetSizer(sizer_P3)

            #Sizer for Panel (Alt_Teams)
            fontLL = wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.BOLD)
            self.LL_text = wx.StaticText(self.AnalysisLL, -1, 'Title')
            self.LL_text.SetFont(fontLL)

            vbox_LL = wx.BoxSizer(wx.VERTICAL)
            vbox_LL.Add(self.LL_text, 0, wx.CENTER)
            #vbox_LL.Add(self.Notebook_AltTeams,1,wx.EXPAND,0)
            self.AnalysisLL.SetSizer(vbox_LL)

            # Split Panel Sizer
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(self.Splitter1,1,wx.EXPAND)
            self.SetSizer(sizer)

            self.Layout()
            self.Centre()


    # Function closes GUI 
    def OnFileQuit(self,event):
        self.Close()

    # Function reloads default parameters/lists
    def OnFileReload(self,event):
        self.Close()


    # Function loads previously saved files
    def OnFileOpen(self,event):
        self.Close()

    # Function saves current work
    def OnFileSave(self,event):
        self.Close()

    # Function analyzes draft, points, adp to suggest an optimal team and the next selection
    def OnAnalyze(self):

        self.Picks_Left.DeleteAllItems()


        self.Picks_Left.InsertStringItem(0, ' ')
        self.Picks_Left.InsertStringItem(1, 'Line 1')
        self.Picks_Left.InsertStringItem(2, ' ')
        self.Picks_Left.InsertStringItem(3, 'Line 2')
        self.Picks_Left.InsertStringItem(4, ' ')
        self.Picks_Left.InsertStringItem(5, 'Line 3')

        self.Picks_Left.SetStringItem(1,2, '1')
        self.Picks_Left.SetStringItem(1,3, '2')
        self.Picks_Left.SetStringItem(1,4, '3')
        self.Picks_Left.SetStringItem(1,5, '4')
        self.Picks_Left.SetStringItem(1,6, '5')
        self.Picks_Left.SetStringItem(1,7, '6')
        self.Picks_Left.SetStringItem(1,8, '7')

        self.Picks_Left.SetStringItem(3,2, '1')     
        self.Picks_Left.SetStringItem(3,3, '1')
        self.Picks_Left.SetStringItem(3,4, '1')
        self.Picks_Left.SetStringItem(3,5, '1')
        self.Picks_Left.SetStringItem(3,6, '1')
        self.Picks_Left.SetStringItem(3,7, '1')
        self.Picks_Left.SetStringItem(3,8, '1')

        self.Picks_Left.SetStringItem(5,2, '2')        
        self.Picks_Left.SetStringItem(5,3, '2')   
        self.Picks_Left.SetStringItem(5,4, '2')   
        self.Picks_Left.SetStringItem(5,5, '2')   
        self.Picks_Left.SetStringItem(5,6, '2')   
        self.Picks_Left.SetStringItem(5,7, '2')   
        self.Picks_Left.SetStringItem(5,8, '2')   

        self.AnalysisUL.Layout()

app = wx.App(0)

# Code to Execute File
class TApplication(wx.App):
    def OnInit(self):

            wx.InitAllImageHandlers()
            MainForm = TMainForm(None, -1,"")
            self.SetTopWindow(MainForm)

            MainForm.Show()
            return 1

if __name__ == "__main__":
    Application = TApplication(0)
    Application.MainLoop()
4

2 に答える 2

2

このアプローチの問題GetSize()は、サイザーの効果が発生する前に呼び出していた可能性があるため、サイザーがパネルに合わせてサイズを変更する前に ListCtrl の元のサイズを返していた可能性があると思います。コードの最後の行ので次のコードを試してください。

table_width = self.Picks_Left.GetSize()[0] #GetSize returns (width, height) tuple
num_col = self.Picks_Left.GetColumnCount()
col_width = table_width/num_col
for i in range(0, num_col):
    self.Picks_Left.SetColumnWidth(i, col_width)
于 2013-08-12T21:49:38.063 に答える
1

リクエストに非常に適したRowColSizerを使用する必要があります。これを使用する方法の小さなデモを次に示します。

import  wx  
import  wx.lib.rcsizer  as rcs

class TestPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)

        sizer = rcs.RowColSizer()

        text = "This sizer lays out it's items by row and column "\
               "that are specified explicitly when the item is \n"\
               "added to the sizer.  Grid cells with nothing in "\
               "them are supported and column- or row-spanning is \n"\
               "handled as well.  Growable rows and columns are "\
               "specified just like the wxFlexGridSizer."

        sizer.Add(wx.StaticText(self, -1, text), row=1, col=1, colspan=5)

        sizer.Add(wx.TextCtrl(self, -1, "(3,1)"), flag=wx.EXPAND, row=3, col=1)
        sizer.Add(wx.TextCtrl(self, -1, "(3,2)"), row=3, col=2)
        sizer.Add(wx.TextCtrl(self, -1, "(3,3)"), row=3, col=3)
        sizer.Add(wx.TextCtrl(self, -1, "(3,4)"), row=3, col=4)
        sizer.Add(
            wx.TextCtrl(self, -1, "(4,2) span:(2,2)"), 
            flag=wx.EXPAND, row=4, col=2, rowspan=2, colspan=2
            )

        sizer.Add(wx.TextCtrl(self, -1, "(6,4)"), row=6, col=4)
        sizer.Add(wx.TextCtrl(self, -1, "(7,2)"), row=7, col=2)
        sizer.Add(wx.TextCtrl(self, -1, "(8,3)"), row=8, col=3)
        sizer.Add(
            wx.TextCtrl(self, -1, "(10,1) colspan: 4"), 
            flag=wx.EXPAND, pos=(10,1), colspan=4
            )

        sizer.Add(
            wx.TextCtrl(self, -1, "(3,5) rowspan: 8, growable col", style=wx.TE_MULTILINE),
            flag=wx.EXPAND, pos=(3,5), size=(8,1)
            )

        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(wx.Button(self, -1, "A vertical box"), flag=wx.EXPAND)
        box.Add(wx.Button(self, -1, "sizer put in the"), flag=wx.EXPAND)
        box.Add(wx.Button(self, -1, "RowColSizer at (12,1)"), flag=wx.EXPAND)
        sizer.Add(box, pos=(12,1))

        sizer.Add(
            wx.TextCtrl(self, -1, "(12,2) align bottom"), 
            flag=wx.ALIGN_BOTTOM, pos=(12,2)
            )

        sizer.Add(
            wx.TextCtrl(self, -1, "(12,3) align center"), 
            flag=wx.ALIGN_CENTER_VERTICAL, pos=(12,3)
            )

        sizer.Add(wx.TextCtrl(self, -1, "(12,4)"),pos=(12,4))
        sizer.Add(
            wx.TextCtrl(self, -1, "(12,5) full border"), 
            flag=wx.EXPAND|wx.ALL, border=15, pos=(12,5)
            )

        sizer.AddGrowableCol(5)
        sizer.AddGrowableRow(9)

        sizer.AddSpacer(10,10, pos=(1,6))
        sizer.AddSpacer(10,10, pos=(13,1))

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


app = wx.App()
frame = wx.Frame(None, -1)
pn = TestPanel(frame)
frame.Show()
frame.Maximize()
app.MainLoop()

同じ要求は、 auiを使用するより凝った方法でも実現できます。

それがあなたを助けることを願っています。

于 2013-08-18T02:29:40.533 に答える