我正在尝试将一个面板中已检查字符串的元组传递给另一个面板中的 textCtrl 小部件。我认为,如果我轮询包含复选框的复选框小部件的面板类并将其设置为等于包含 TextCtrl 小部件的面板类的属性,我可以根据选中的框在 TextCtrl 小部件中执行操作
我也尝试过使用 pubsub,但我遇到了困难,并且不确定您是否会使用它。
作为免责声明,我是面向对象编程和 python 的新手。我在学习面向对象编程方面取得了进展,但对我来说仍然有些模糊。
这是我的代码:
#! /usr/bin/python
# Trying to do things in a separate panel based on
# events that happen in another panel
import wx
# ----- Functions
# ----- Classes
class chkbxPanel(wx.Panel):
# This class defines the panel that will
# contain the checkbox
def __init__(self, parent):
wx.Panel.__init__(self,parent=parent, id=-1)
# Widgets
List = ['one','two','three']
Prompt = 'Please Make a Choice'
self.ChkBx = wx.CheckListBox(self,id=-1,choices=List,size=(-1,200))
self.PromptChkBx = wx.StaticText(self,id=-1,label=Prompt)
# Page Sizers
self.panel_vertSizer=wx.BoxSizer(wx.VERTICAL)
self.panel_vertSizer.Add(self.PromptChkBx,proportion=0,flag=wx.ALIGN_LEFT)
self.panel_vertSizer.Add(self.ChkBx,proportion=0,flag=wx.ALIGN_LEFT)
# Invoke Sizer
self.SetSizer(self.panel_vertSizer)
# Make 'self' (the panel) shrink to the minimum size
# required by the controls
self.Fit()
# end __init__
# ----- Functions
class resultsPanel(wx.Panel):
# This class define the panel that will
# contain the textctrl
def __init__ (self,parent):
wx.Panel.__init__(self,parent=parent,id=-1)
# Widgets
ResultsPanelTitle = 'Results:'
self.ResultsTitle = wx.StaticText(self, id=-1, label= ResultsPanelTitle)
self.Results = wx.TextCtrl(self, id=-1,size=(300,500),style=(wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_DONTWRAP))
self.CheckedBxs = ()
lenofcb = len(self.CheckedBxs)
typeofcb = type(self.CheckedBxs)
self.Results.AppendText('How Many Boxes are Checkd:\n')
self.Results.AppendText(str(lenofcb)+'\n')
self.Results.AppendText(str(typeofcb)+'\n')
# Page Sizer
self.panel_vertSizer = wx.BoxSizer(wx.VERTICAL)
self.panel_vertSizer.Add(self.ResultsTitle,proportion=0, flag=wx.ALIGN_LEFT)
self.panel_vertSizer.Add(self.Results, proportion=0, flag=wx.ALIGN_LEFT)
# Invoke Sizer
self.SetSizer(self.panel_vertSizer)
# Make 'self' (the panel) shrink to the minimum size
# required by the controls
self.Fit()
# end __init__
# ----- Functions
# ----- Main Frame
class MainFrame(wx.Frame):
# A 2-Control Class With BoxSizers
def __init__(self):
# Configure the Figure
titleText = 'Wx Question'
wx.Frame.__init__( self, None, title=titleText
,size=(600,300), style=wx.DEFAULT_FRAME_STYLE)
# First Frame Control automatically expands to the
# Frame's client size
frame_panel = wx.Panel(self)
# Create the Controls
LeftPanel = chkbxPanel(frame_panel)
RightPanel = resultsPanel(frame_panel)
RightPanel.CheckedBxs = LeftPanel.ChkBx.GetCheckedStrings()
RightPanel.CheckedBxs = ('one','two')
# Create Sizers and add the controls
panelCtrls_horzSizer = wx.BoxSizer(wx.HORIZONTAL)
panelCtrls_horzSizer.Add(LeftPanel)
panelCtrls_horzSizer.Add(RightPanel)
framePanel_vertSizer = wx.BoxSizer(wx.VERTICAL)
framePanel_vertSizer.Add(panelCtrls_horzSizer)
frame_panel.SetSizer(framePanel_vertSizer)
frame_panel.Fit()
self.SetSize((600,600))
# Main if statement
if __name__ == '__main__':
app = wx.PySimpleApp(redirect=False)
appFrame = MainFrame().Show()
app.MainLoop()
感谢您的任何帮助