當我試圖了解WXPython庫的作業原理時,我發現了第一個問題。
我遇到的主要問題是,當我運行代碼時,我的標簽在右側面板上是一個接一個的,而運行以下代碼。
import wx
from wx.core import Font, Position, Size
# class MyTree
# class="MyFrame"[/span]
# class MyApp # class MyFrame
#---------------------------------------------------------------------------
class MyTree(wx.TreeCtrl)。
""
我們定制的TreeCtrl類。
""
def __init__(self, parent, id, position, size, style)。
""
初始化我們的樹。
"""
wx.TreeCtrl.__init__(self, parent, id, position, size, style)
root = self.AddRoot('Programmer')
os = self.AppendItem(root, '超級腳本1')
pl = self.AppendItem(root, 'Ultra Script 2')
tk = self.AppendItem(root, 'Ultra Script 3')
cl = self.AppendItem(pl, '隨機腳本')
sl = self.AppendItem(pl, 'Miscelanious')
self.AppendItem(os, 'Script1')
self.AppendItem(os, 'Script2')
self.AppendItem(os, 'Script3')
self.AppendItem(os, 'Script4')
self.AppendItem(cl, 'Script1')
self.AppendItem(cl, 'Script2')
self.AppendItem(cl, 'Script3')
self.AppendItem(sl, '1')
self.AppendItem(sl, '2')
self.AppendItem(sl, '3')
self.AppendItem(sl, '4')
self.AppendItem(tk, 'Script1')
self.AppendItem(tk, 'Script2')
self.AppendItem(tk, 'Script3')
self.AppendItem(tk, 'Script4 ')
self.AppendItem(tk, 'Script5')
#---------------------------------------------------------------------------
class MyFrame(wx.Frame)。
""
我們自定義的視窗類。
""
def __init__(self, parent, id, title):
""
初始化我們的視窗。
""
wx.Frame.__init__(self, parent, id, title,
wx.DefaultPosition, wx.Size(800, 600)
#self.SetIcon(wx.Icon('./icons/wxwin.ico', wx.BITMAP_TYPE_ICO))。
#------------
# 創建一個分割器視窗。
self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_LIVE_UPDATE)
# 創建左面板。
leftPanel = wx.Panel(self.splitter, -1)
# 創建我們的樹并把它放到左邊的面板上。
self.tree = MyTree(leftPanel, 1,
wx.DefaultPosition,
wx.DefaultSize,
wx.TR_HIDE_ROOT|
wx.TR_HAS_BUTTONS)
self.tree.SetBackgroundColour('#3DB2FF'/span>)
# Bind the OnSelChanged method to the tree。
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=1)
# 創建右面板。
rightPanel = wx.Panel(self.splitter, -1, style=wx.SUNKEN_BORDER)
rightPanel.SetBackgroundColour('#79B4B7')
# 創建一個小部件來顯示靜態文本。
# 并將其存盤在右側面板中。
self.display = wx.StaticText(rightPanel, -1, ''/span>,
style=wx.ALIGN_LEFT)
# 將左右兩邊的窗格放入分割視窗。
self.splitter.SplitVertically(leftPanel, rightPanel, 200)
# 子視窗的最小尺寸。
self.splitter.SetMinimumPaneSize(1)
#------------
# 創建一個將包含左面板內容的盒子尺寸。
leftBox = wx.BoxSizer(wx.VERTICAL)
# Add the tree to the box sizer.
leftBox.Add(self.tree, 1, wx.EXPAND)
# 將右面板的大小設定為樹所需要的大小.
leftPanel.SetSizer(leftBox)
# 創建包含面板內容的右箱尺寸。
rightBox = wx.BoxSizer(wx.VERTICAL)
# 添加顯示部件到右邊的面板。
rightBox.Add(self.display, 0, wx.ALL, 1)
label = wx.BoxSizer(wx.VERTICAL)
self.text = wx.StaticText(self.display, label = "This is amazing. "/span>, pos = (0,5)
# 設定右邊面板的大小為。
# display widget所要求的。
rightPanel.SetSizer(rightBox)
#------------
# 在螢屏的中心創建視窗。
self.Centre()
#-----------------------------------------------------------------------
def OnSelChanged(self, event)。
""
當選定的專案被改變時呼叫的方法。
""
# Get the selected item object. 獲得選定的專案物件。
item = event.GetItem()
# 在文本部件中顯示選中的專案文本。
self.display.SetLabel(self.tree.GetItemText(item))
#---------------------------------------------------------------------------
class MyApp(wx.App)。
""
我們的應用程式類。
""
def OnInit(self)。
""
通過創建帶有樹的分割視窗進行初始化。
"""
frame = MyFrame(None, -1, '簡單視窗' )
frame.Show(True)
self.SetTopWindow(frame)
return True
#---------------------------------------------------------------------------
if __name__ == '__main__'/span>:
app = MyApp(0)
app.MainLoop()
我還是這個庫的新手,所以如果有人知道如何解決這個問題,我會很感激的!
CodePudding在你的代碼中self.text的父級是self.display。這不可能發生,因為self.display是一個StaticText,不是一個容器。如果你只是把self.text的資訊添加到右邊面板的sizer中,那么它就可以作業了:
# label is unused: label = wx.BoxSizer(wx.VERTICAL)
self.text = wx.StaticText(rightPanel, label = "This is amazing. ")
rightBox.Add(self.text)
當我們使用尺寸器時,我們不使用pos=(X,Y),因為尺寸器將執行尺寸和放置。
uj5u.com熱心網友回復:
正如Petr所指出的,self.text需要被放入rightPanel中,并添加到該面板的sizer中。
使用一個垂直的BoxSizer確實在右邊留下了一個非常大的浪費空間。所以你可以考慮使用一個簡單的GridSizer來定義兩列,一列用于樹形標簽,另一列用于你的描述性文本。
你的修正代碼:
import wx
# class MyTree
# class="MyFrame"[/span]。
# class MyApp # class MyFrame
#---------------------------------------------------------------------------
class MyTree(wx.TreeCtrl)。
""
我們定制的TreeCtrl類。
""
def __init__(self, parent, id, position, size, style)。
""
初始化我們的樹。
"""
wx.TreeCtrl.__init__(self, parent, id, position, size, style)
root = self.AddRoot('Programmer')
os = self.AppendItem(root, '超級腳本1')
pl = self.AppendItem(root, 'Ultra Script 2')
tk = self.AppendItem(root, 'Ultra Script 3')
cl = self.AppendItem(pl, '隨機腳本')
sl = self.AppendItem(pl, 'Miscellaneous')
self.AppendItem(os, 'Script1')
self.AppendItem(os, 'Script2')
self.AppendItem(os, 'Script3')
self.AppendItem(os, 'Script4')
self.AppendItem(cl, 'Script1')
self.AppendItem(cl, 'Script2')
self.AppendItem(cl, 'Script3')
self.AppendItem(sl, '1')
self.AppendItem(sl, '2')
self.AppendItem(sl, '3')
self.AppendItem(sl, '4')
self.AppendItem(tk, 'Script1')
self.AppendItem(tk, 'Script2')
self.AppendItem(tk, 'Script3')
self.AppendItem(tk, 'Script4 ')
self.AppendItem(tk, 'Script5')
#---------------------------------------------------------------------------
class MyFrame(wx.Frame)。
""
我們自定義的視窗類。
""
def __init__(self, parent, id, title):
""
初始化我們的視窗。
""
wx.Frame.__init__(self, parent, id, title,
wx.DefaultPosition, size=(800, 600)
#self.SetIcon(wx.Icon('./icons/wxwin.ico', wx.BITMAP_TYPE_ICO))/span>
#------------
# 創建一個分割器視窗。
self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_LIVE_UPDATE)
# 創建左面板。
leftPanel = wx.Panel(self.splitter, -1)
# 創建我們的樹并把它放到左邊的面板上。
self.tree = MyTree(leftPanel, 1,
wx.DefaultPosition,
wx.DefaultSize,
wx.TR_HIDE_ROOT|
wx.TR_HAS_BUTTONS)
self.tree.SetBackgroundColour('#3DB2FF'/span>)
# Bind the OnSelChanged method to the tree。
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=1)
# 創建右面板。
rightPanel = wx.Panel(self.splitter, -1, style=wx.SUNKEN_BORDER)
rightPanel.SetBackgroundColour('#79B4B7')
# 創建一個小部件來顯示靜態文本。
# 并將其存盤在右側面板中。
self.display = wx.StaticText(rightPanel, -1, ''/span>)
# 將左、右面板放入分割視窗。
self.splitter.SplitVertically(leftPanel, rightPanel, 200)
# 子視窗的最小尺寸。
self.splitter.SetMinimumPaneSize(1)
# 創建一個將包含左面板內容的盒子尺寸。
leftBox = wx.BoxSizer(wx.VERTICAL)
# 將樹添加到盒子尺寸器中。
leftBox.Add(self.tree, 1, wx.EXPAND)
# 將右面板的大小設定為樹所需要的大小.
leftPanel.SetSizer(leftBox)
# 創建包含面板內容的右框尺寸。
rightBox = wx.GridSizer(rows=1, cols=2, vgap=5, hgap=5)
#rightBox = wx.BoxSizer(wx.VERTICAL)
#添加顯示部件到右面板。
rightBox.Add(self.display, 0, wx.ALL, 10)
lab = "這太神奇了。
"
lab = "這個標簽可以是多行的
"
lab = "并提供幫助文本
"
lab = "或對所選專案的詳細解釋"。
self.text = wx.StaticText(rightPanel, label = lab)
# 添加文本部件到右面板。
rightBox.Add(self.text, 0, wx.ALL, 10)
# 設定右邊面板的大小為。
# display widget所要求的。
rightPanel.SetSizer(rightBox)
#------------
# 在螢屏的中心創建視窗。
self.Centre()
#-----------------------------------------------------------------------
def OnSelChanged(self, event)。
""
當選定的專案被改變時呼叫的方法。
""
# Get the selected item object. 獲得選定的專案物件。
item = event.GetItem()
# 在文本部件中顯示選中的專案文本。
self.display.SetLabel(self.tree.GetItemText(item))
#---------------------------------------------------------------------------
class MyApp(wx.App)。
""
我們的應用程式類。
""
def OnInit(self)。
""
通過創建帶有樹的分割視窗進行初始化。
"""
frame = MyFrame(None, -1, '簡單視窗' )
frame.Show(True)
self.SetTopWindow(frame)
return True
#---------------------------------------------------------------------------
if __name__ == '__main__'/span>:
app = MyApp()
app.MainLoop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315116.html
標籤:
上一篇:在C中初始化字符陣列的不同型別

