2011-12-05 78 views
0

左にサイズ変更可能なサイドバー領域(200ピクセル幅で開始)と、残りの領域を塗りつぶすように展開する必要があるメイン領域を含むアプリケーションを構築しています。私は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):

ここ

コードです

提案?

答えて

1

DrawRectangleを呼び出してこれらの行を描画しています。 あなたが行を排除し、まだあなたが行うことができます長方形描きたい場合は、次の2つのmake_canvas方法で

dc.SetPen(wx.Pen("WHITE",1)) 
dc.DrawRectangle(0, 0, w, h) 

を。それは窓で働く。

+0

どのように 'SetPen'を使ってイメージをタイルしますか? –

+0

あなたは何を意味するのかわかりません。私はすでに(私の)数字が並べられているのを見る。それを試しましたか? – joaquin

+0

ああ!追加するのではなく、 'SetBrush'を置き換えることを意図していました。このコードを次のように変更します: 'dc.SetPen(wx.Pen(" WHITE "、1、style = wx.TRANSPARENT))' –

関連する問題