如何在窗口框架中指明特定的TextCtrl并根据程序结果在wxPython上打印到它?

时间:2014-05-04 12:16:16

标签: python wxpython

我想将信息文本打印到程序本身指定的TextCtrl窗口小部件,但不知道如何操作。我只知道如何“手动”执行此操作(假设分别执行self.text_ctrl_5.SetLabel("blah")self.text_ctrl_27.SetLabel("blah")的程序的一部分),但我不知道如何指示程序自己执行此操作,我的意思是如果条件A - >然后专门打印到text_ctrl_5,如果条件B - >然后专门打印到text_ctrl_27。

对于2-3个位置,我可以扩展行代码(为每个text_ctrl创建一个专用的打印指令),但对于16或24个条目,我正在寻找一些紧凑的解决方案。

假设我要显示这两个文本位置,它们只是更大窗口框架的一部分,我如何指示程序在特定位置打印?假设今天是星期一,那么在text_ctrl_1上打印“mon”,如果是星期二,则在text_ctrl_2上打印“tue”? (一周中的日期条件只是例如,不是实际需要;打印的标签在不同的位置也可能是相同的(或不是))

self.text_ctrl_1 = wx.TextCtrl(self, wx.ID_ANY, "")
self.text_ctrl_2 = wx.TextCtrl(self, wx.ID_ANY, "")

1 个答案:

答案 0 :(得分:1)

如果您在一个屏幕上有16-24个文本框,那么可能是时候重新考虑您的用户界面了。简单几乎总是更好。我不明白为什么你不能只将信息打印到一个或两个多行文本框。但无论如何,我认为用字典做这种事情最简单的方法。这是一个例子:

import random
import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.text_ctrls = {}

        sizer = wx.BoxSizer(wx.VERTICAL)
        for i in range(12):
            txt = wx.TextCtrl(self)
            self.text_ctrls[i] = txt
            sizer.Add(txt, 0, wx.ALL|wx.EXPAND, 5)

        btn = wx.Button(self, label="Update TextCtrls")
        btn.Bind(wx.EVT_BUTTON, self.onButton)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onButton(self, event):
        """"""
        ctrls = self.text_ctrls.keys()
        choices = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"]
        for i in range(3):
            ctrl = random.choice(ctrls)
            self.text_ctrls[ctrl].SetValue(random.choice(choices))


########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Test", size=(800,600))
        panel = MyPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

基本思想是创建一系列文本控件并将它们添加到字典中。然后在更新按钮中,我们随机选择一周中的某一天应用于随机选择的文本控件。