wxpython-我们可以在pybusyinfo对话框上添加ok按钮吗?

时间:2017-03-08 12:52:05

标签: wxpython wxwidgets

我创建了pybusyinfo对话框来显示消息,30秒后它会自动关闭。

现在我需要在该对话框中添加ok按钮以获取用户输入,并且不会按下对话框应在30秒内关闭的按钮。

我们可以将该按钮添加到wx.lib.agw.pybusyinfo对话框中吗?

或者是否有任何其他wx小部件对话框会在一段时间后自动关闭?

import wx
import wx.lib.agw.pybusyinfo as PBI
retVal = showmsg("dialog will be closed in 30 secs...")
time.sleep(30)
retVal = None

def showmsg(msg):
    app = wx.App(redirect=False)
    title = 'Message!'
    retVal = PBI.PyBusyInfo(msg, title=title)
    return retVal

1 个答案:

答案 0 :(得分:2)

编写您自己的繁忙对话框,其中包含一个标尺,以显示它正忙 使用 pcon = model.getValueAt(selectedRowIndex,0).toString(); email = model.getValueAt(selectedRowIndex,3).toString(); mob = model.getValueAt(selectedRowIndex,4).toString(); tel = model.getValueAt(selectedRowIndex,5).toString(); ext = model.getValueAt(selectedRowIndex,6).toString(); posi = model.getValueAt(selectedRowIndex,1).toString(); dep = model.getValueAt(selectedRowIndex,2).toString(); 循环测量。
这应该让你开始:

wxTimer

编辑:
你需要一个框架,因为对话框要求父母,所以最简单的方法是制作一个你看不到的框架 丢失上面的import wx class MyFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "Busy Dialog",size=(500,200)) self.panel = wx.Panel(self) sizer = wx.BoxSizer(wx.VERTICAL) self.log = wx.TextCtrl(self.panel, wx.ID_ANY, size=(400,100),style = wx.TE_MULTILINE|wx.TE_READONLY|wx.VSCROLL) self.button = wx.Button(self.panel, label="Click me") sizer.Add(self.log, 0, wx.EXPAND | wx.ALL, 10) sizer.Add(self.button, 0, wx.EXPAND | wx.ALL, 10) self.panel.SetSizer(sizer) self.Bind(wx.EVT_BUTTON, self.OnButton) def OnButton(self,event): dlg = Busy(parent = self.panel) dlg.ShowModal() if dlg.result_text: self.log.AppendText("Text Input: "+dlg.result_text+"\n") dlg.Destroy() class Busy(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, wx.ID_ANY, "Busy", size= (420,240)) self.panel = wx.Panel(self,wx.ID_ANY) self.label = wx.StaticText(self.panel, label="Input", pos=(20,20)) self.textinput = wx.TextCtrl(self.panel, value="", pos=(80,20), size=(300,-1)) self.gauge = wx.Gauge(self.panel,size=(300,20),pos=(80,80), style=wx.GA_HORIZONTAL) self.livelabel = wx.StaticText(self.panel, label="Time to live:", pos=(80,110)) self.lltime = wx.StaticText(self.panel, label="30", pos=(160,110)) self.saveButton =wx.Button(self.panel, label="Save Input", pos=(80,160)) self.closeButton =wx.Button(self.panel, label="Cancel", pos=(180,160)) self.timeoutButton =wx.Button(self.panel, label="Timer Off", pos=(280,160)) self.saveButton.Bind(wx.EVT_BUTTON, self.SaveBusyString) self.closeButton.Bind(wx.EVT_BUTTON, self.OnQuit) self.timeoutButton.Bind(wx.EVT_BUTTON, self.OnNoTimeout) self.Bind(wx.EVT_CLOSE, self.OnQuit) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER,self.OnTimer, self.timer) self.lifetimer = wx.Timer(self) self.Bind(wx.EVT_TIMER,self.OnLifeTimer, self.lifetimer) self.timer.Start(100) self.lifetimer.Start(1000) self.timeoutbutton_pressed = False self.gauge.SetBackgroundColour(wx.Colour(0, 127, 255, 255)) #Slate Blue self.gauge.SetRange(100) self.gauge.SetValue(0) self.life = 30 self.direction = 1 self.Show() def OnTimer(self, evt): #Update gauge x = int(self.gauge.GetValue()) if x == 0: self.direction = 1 elif x == 100: self.direction = -1 x+=self.direction self.gauge.SetValue(x) def OnLifeTimer(self, evt): #Update time to live if self.timeoutbutton_pressed == True: return self.life -= 1 self.lltime.SetLabelText(str(self.life)) if self.life < 1: self.OnQuit(None) def OnNoTimeout(self, evt): # toggle time to live if self.timeoutbutton_pressed == False: self.timeoutbutton_pressed = True self.timeoutButton.SetLabel("Timer On") else: self.timeoutbutton_pressed = False self.timeoutButton.SetLabel("Timer Off") def OnQuit(self, event): self.timer.Stop() self.lifetimer.Stop() self.result_text = None self.Destroy() def SaveBusyString(self, event): # return input self.result_text = self.textinput.GetValue() self.timer.Stop() self.lifetimer.Stop() self.Destroy() app = wx.App() frame = MyFrame(None) frame.Show() app.MainLoop() 类,并将代码的MyFrame部分更改为:

app