【问题标题】:How to add some text to an existing message box in wxpython?如何向 wxpython 中的现有消息框添加一些文本?
【发布时间】:2015-07-22 20:01:30
【问题描述】:

我是 wxpython 的新手。我想使用 wxpython GUI 编程向现有消息框添加一些文本。我在网上搜索,但我找不到任何有用的信息。你能帮我解决这个问题吗?

我的目标是运行一个代码,然后在代码运行到一个窗口期间打印一些文本。

谢谢,


我想要这样的东西:

    outPut = 'Simulation is done' 
    wx.MessageBox(outPut, "Results")
    newText = 'The results are:\n' #add this text to previous MessageBox

【问题讨论】:

  • 文本框中现有文本的类型是什么?是StaticText吗?是TextCtrl 盒子吗?
  • 只是一个普通的文本。像这样:outPut = 'Simulation is done\'.

标签: python-2.7 wxpython messagebox


【解决方案1】:

我不认为你可以用 MessageBox 做到这一点,但是使用 ProgressDialog 呢?我更新了代码并测试了它:

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import wx
print(wx.VERSION_STRING)

import wx.lib.sized_controls as sc


class abc(sc.SizedFrame):

    def __init__(self, parent, id):
        super(abc, self).__init__(parent, id, 'Frame aka window')
        cpane = self.GetContentsPane()

        button1 = wx.Button(cpane, label="ProgressDialog 1 sample")
        button1.Bind(wx.EVT_BUTTON, self.pdlg1)

        button1 = wx.Button(cpane, label="ProgressDialog 2 sample")
        button1.Bind(wx.EVT_BUTTON, self.pdlg2)


    def pdlg1(self, evt):
        dlgPro = wx.ProgressDialog(u"Simulation progress 1",
                                   u"It is starting",
                                   3,
                                   None,
                                   wx.PD_AUTO_HIDE | wx.PD_APP_MODAL)
        # do something
        dlgPro.Update(1, u"first one is done")
        # do something
        wx.Yield()
        wx.Sleep(1)
        dlgPro.Update(2, u"second one is done")
        # do something
        wx.Yield()
        wx.Sleep(1)
        dlgPro.Update(3, u"we are finished")

    def pdlg2(self, evt):
        dlgPro = wx.ProgressDialog(u"Simulation progress 2",
                                   u"It is starting",
                                   -1,
                                   None,
                                   wx.PD_AUTO_HIDE | wx.PD_APP_MODAL)
        # do something
        dlgPro.Pulse(u"first one is done")
        # do something
        wx.Yield()
        wx.Sleep(1)
        dlgPro.Pulse(u"second one is done")
        # do something
        wx.Yield()
        wx.Sleep(1)
        dlgPro.Pulse(u"we are finished")

if __name__ == '__main__':
    app = wx.App()
    frame = abc(None, -1)
    frame.Show()
    app.MainLoop()

http://wxpython.org/Phoenix/docs/html/ProgressDialog.html?highlight=progress

【讨论】:

  • 感谢您的帮助。但是,当我使用ProgressDialog 并在对话框显示最后一条消息后,原来的程序停止工作,我不知道为什么?我必须在最后一个dlgPro.Update() 部分之后添加一些东西吗?
  • 如何显示进度对话框?你在用showModal()吗?
  • 我更新了示例代码,现在你可以运行它了。不同之处在于第一个示例定义了步骤(在本例中为 3),而第二个示例没有。
【解决方案2】:

为了向文本框添加文本,您必须向框架添加某种文本对象。例如

class MyFrame(wx.Frame):
  def __init__(self, *args, **kwargs):
      wx.Frame.__init__(*args, **kwargs)
      self.text = wx.StaticText(self, wx.ID_ANY, "Hello World!")

创建一个包含文本“Hello, World”的框架。它是静态文本,这意味着用户无法更改它。如果您想要可以更改的文本,请查看wx.TextCtrl

【讨论】:

  • 我想要在我原来的帖子的最后一部分。
猜你喜欢
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多