gpt4 book ai didi

python - 根据另一个笔记本选项卡中的 TextCtrl() 值更改 wx.ComboBox() 中的选择

转载 作者:行者123 更新时间:2023-11-28 16:52:28 25 4
gpt4 key购买 nike

我正在使用 wx 制作用于运行另一个程序的 GUI。我有两个笔记本选项卡:第一个用于输入,第二个用于我程序的输出。我想将其设置为用户将在 InputPanel 中指示程序输出的目录,而 OutputPanel 中的 ComboBox 将使用该目录的内容进行更新。我的代码的精简版本如下所示:

    #!/usr/bin/python

import glob
import wx

class InputPanel(wx.Panel):
dirF = 0
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

self.dirFileText = wx.StaticText(self, label="Output Directory:")
self.dirFile = wx.TextCtrl(self, value="fuda", style = wx.TE_PROCESS_ENTER)
self.Bind(wx.EVT_TEXT, self.EvtText, self.dirFile)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.dirFileText, 0, wx.ALL, 2)
sizer.Add(self.dirFile, 0, wx.ALL|wx.EXPAND,2)
self.SetSizer(sizer)
sizer.Fit(self)

def EvtText(self, event):
event.GetString()
InputPanel.dirF = self.dirFile.GetValue()

class OutputPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

self.dirText = wx.StaticText(self, label="Choice?")
self.dirT = wx.ComboBox(self, choices='', style=wx.CB_READONLY)
self.dirT.SetItems(glob.glob("%s/*.dat" % (InputPanel.dirF)))
self.Bind(wx.EVT_COMBOBOX, self.onSelect, self.dirT)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.dirText, 0, wx.ALL, 2)
sizer.Add(self.dirT, 0, wx.ALL|wx.EXPAND, 2)
self.SetSizer(sizer)
sizer.Fit(self)

def onSelect(self, event):
event.GetSelection()

class Notebook(wx.Notebook):
def __init__(self, parent):
wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=wx.BK_DEFAULT)

tabOne = InputPanel(self)
self.AddPage(tabOne, "Input")
tabTwo = OutputPanel(self)
self.AddPage(tabTwo, "Output")

self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.onPageChanged)
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.onPageChanging)

def onPageChanged(self, event):
event.Skip()

def onPageChanging(self, event):
event.Skip()

class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "nmrPipeFit", size=(600,400))
panel = wx.Panel(self)

# Setting up the menu
filemenu = wx.Menu()
menuExit = filemenu.Append(wx.ID_EXIT, "E&xit", "Exit the program")
menubar = wx.MenuBar() # Create the menubar
menubar.Append(filemenu, "&File") # Add file menu to menubar
self.SetMenuBar(menubar) # Add menubar to frame
# Set menu events
self.Bind(wx.EVT_MENU, self.OnExit, menuExit)

notebook = Notebook(panel)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
panel.SetSizer(sizer)
sizer.Fit(self)
self.Layout()
self.Show()

def OnExit(self, event):
self.Close(True) # Close the frame

if __name__== "__main__":
app=wx.PySimpleApp()
frame = MainWindow()
app.MainLoop()

我已经尝试了几种不同的方法来获取组合框的选项列表,以根据 InputPanel 中的目录更改进行更新,但没有成功。任何帮助将不胜感激。

提前致谢迈克尔莱瑟姆

最佳答案

好吧,有一种丑陋的 hack 方法和优雅的方法。实际上,可能有几个黑客。让我们来看看最常见的一种:

在笔记本的页面更改事件中,您可以告诉输出面板执行如下操作:inputPanelRef.dirFile.GetValue(),然后根据需要更新组合框的条目。您可能需要从笔记本小部件执行此操作。

我更喜欢在面板之间传递信息的方式是使用 Pubsub。这里有一个很好的例子: http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

关于python - 根据另一个笔记本选项卡中的 TextCtrl() 值更改 wx.ComboBox() 中的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585883/

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