2011-12-05 44 views
0

我正在構建一個應該包含左側可調整大小的側欄區域(從200px寬度開始)和右側應展開以填充其餘區域的主區域的應用程序。我已經使用了SplitterWindow方法,因爲它是我認爲可以在面板上調整大小的唯一方法。我在個別面板周圍出現了一些黑色邊框,整個畫面我都無法擺脫。當我註釋掉make_canvas調用時,單個面板上的邊框消失,但框架上的邊框仍然存在。奇怪的是,如果我調整整個應用程序窗口的邊界閃爍開啓和關閉。我懷疑這實際上不是邊界問題,而是一個BoxSizing問題,但我不確定如何照顧它。在wxPython應用程序中從框架和麪板中刪除邊框

下面的代碼:

#! /usr/bin/python 
# -*- coding: utf-8 -*- 

import wx, random 


class TDTaskBarIcon(wx.TaskBarIcon): 

    def __init__(self, parent): 
     wx.TaskBarIcon.__init__(self) 
     self.parentApp = parent 
     self.icon = wx.Icon("images/icon_glasses.png", wx.BITMAP_TYPE_PNG) 
     self.SetIconImage() 

    def SetIconImage(self): 
     self.SetIcon(self.icon) 


class Sidebar(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # tiled background 
     self.bgimage = wx.Bitmap('images/noise.png') 
     wx.FutureCall(50, self.make_canvas) 
     wx.EVT_SIZE(self, self.make_canvas) 
     self.SetBackgroundColour((229,226,218)) 

    def make_canvas(self, event=None): 
     dc = wx.ClientDC(self) 
     brush_bmp = wx.BrushFromBitmap(self.bgimage) 
     dc.SetBrush(brush_bmp) 
     w, h = self.GetClientSize() 
     dc.DrawRectangle(0, 0, w, h) 


class Main(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # tiled background 
     self.bgimage = wx.Bitmap('images/noise.png') 
     wx.FutureCall(50, self.make_canvas) 
     wx.EVT_SIZE(self, self.make_canvas) 
     self.SetBackgroundColour((229,226,218)) 
     self.SetBackgroundColour('WHITE') 

    def make_canvas(self, event=None): 
     dc = wx.ClientDC(self) 
     brush_bmp = wx.BrushFromBitmap(self.bgimage) 
     dc.SetBrush(brush_bmp) 
     w, h = self.GetClientSize() 
     dc.DrawRectangle(0, 0, w, h) 


# Create Tapedeck class 
class Tapedeck(wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.tbicon = TDTaskBarIcon(self) 
     self.tbicon.Bind(wx.EVT_MENU, self.OnQuit, id=wx.ID_EXIT) 

     splitter = wx.SplitterWindow(self) 
     self.Sidebar = Sidebar(splitter) 
     self.Main = Main(splitter) 
     splitter.SplitVertically(self.Sidebar, self.Main) 
     splitter.SetSashPosition(200) 
     splitter.SetMinimumPaneSize(200) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(splitter, 1, wx.EXPAND) 
     self.SetSizerAndFit(sizer) 
     self.SetAutoLayout(True) 

     self.InitUI() 
     self.SetSize((800, 600)) 
     self.SetTitle('Tapedeck') 
     self.Center() 
     self.Show(True) 

    def InitUI(self): 

     panel = wx.Panel(self) 

     # font styles 
     header = wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD, False, u'Helvetica') 

     # create a menubar at the top of the user frame 
     menuBar = wx.MenuBar() 

     # create menus 
     fileMenu = wx.Menu() 
     helpMenu = wx.Menu() 

     # export 
     export = fileMenu.Append(wx.NewId(), "&Export", "Export Playlist", 
            wx.ITEM_NORMAL) 
     export.SetBitmap(wx.Bitmap('images/men_playlist.png')) 

     fileMenu.AppendSeparator() 

     # quit 
     quit = fileMenu.Append(wx.NewId(), "&Quit\tCtrl+Q", "Quit the program", 
            wx.ITEM_NORMAL) 
     quit.SetBitmap(wx.Bitmap('images/men_quit.png')) 
     self.Bind(wx.EVT_MENU, self.OnQuit, quit) 

     # put the file menu on the menubar 
     menuBar.Append(fileMenu, "&File") 

     # about tapedeck 
     about = helpMenu.Append(wx.NewId(), "&About TapeDeck", 
            "About TapeDeck", wx.ITEM_NORMAL) 
     about.SetBitmap(wx.Bitmap('images/men_skull.png')) 
     self.Bind(wx.EVT_MENU, self.OnAbout, about) 

     # put the help menu on the menubar 
     menuBar.Append(helpMenu, "&Help") 

     # set menu bar 
     self.SetMenuBar(menuBar) 

     # create a status bar at the bottom of the frame 
     self.CreateStatusBar() 

    def OnQuit(self, e): 
     self.tbicon.RemoveIcon() 
     self.tbicon.Destroy() 
     self.Close() 

    def OnAbout(self, e): 
     self.SetStatusText("Here's your help!") 


# Run the application 
def main(): 
    deck = wx.App() 
    Tapedeck(None) 
    deck.MainLoop()  

if __name__ == '__main__': 
    main() 

和截圖:

大小調整之前(source):

Before resize.

調整大小後(source):

After resize.

對此提出建議?

回答

1

您正在致電DrawRectangle正在繪製這些行。 如果你想消除的線條和畫還是可以做的長方形:

dc.SetPen(wx.Pen("WHITE",1)) 
dc.DrawRectangle(0, 0, w, h) 
兩個 make_canvas方法

。它在Windows中工作。

+0

但是,如何使用'SetPen'來平鋪圖像? –

+0

不確定你的意思。我已經看到(我的)數字平鋪。你試過了嗎? – joaquin

+0

啊!以爲你打算替換'SetBrush',而不是添加到。將代碼更改爲:'dc.SetPen(wx.Pen(「WHITE」,1,style = wx.TRANSPARENT))' –