gpt4 book ai didi

python - 在 wxPython 中的两个面板之间传递元组

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:35 25 4
gpt4 key购买 nike

我试图将一个面板中已检查字符串的元组传递到另一个面板中的 textCtrl 小部件。我认为,如果我轮询包含 checklistbox 小部件的面板类以查找选中的框,并将其设置为等于包含 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()

感谢您的帮助

最佳答案

您可以在父类中进行事件绑定(bind),因为它可以访问两个面板

#! /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
choices = ['one', 'two', 'three']
prompt = 'Please Make a Choice'
self.chkBx = wx.CheckListBox(self, choices=choices, size=(-1, 200))
self.PromptChkBx = wx.StaticText(self, 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, label=resultsPanelTitle)
self.results = wx.TextCtrl(self, 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)
self.rightPanel = ResultsPanel(frame_panel)

# Create Sizers and add the controls
panelCtrls_horzSizer = wx.BoxSizer(wx.HORIZONTAL)
panelCtrls_horzSizer.Add(leftPanel)
panelCtrls_horzSizer.Add(self.rightPanel)

framePanel_vertSizer = wx.BoxSizer(wx.VERTICAL)
framePanel_vertSizer.Add(panelCtrls_horzSizer)

frame_panel.SetSizer(framePanel_vertSizer)
frame_panel.Fit()
self.SetSize((600, 600))

leftPanel.chkBx.Bind(wx.EVT_CHECKLISTBOX, self.onCheckBox)

def onCheckBox(self, event):
checked = event.EventObject.CheckedStrings
self.rightPanel.results.AppendText(
'Checked: {0}, Qty checked: {1}\n'.format(checked, len(checked)))



# Main if statement
if __name__ == '__main__':
app = wx.App(redirect=False)
appFrame = MainFrame().Show()
app.MainLoop()

关于python - 在 wxPython 中的两个面板之间传递元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com