2017-06-27 12 views
2

我想在用户单击按钮时打开一个TextEntryDialog。所以,如果我有,我打算这样绑定母画面的按钮:On按钮点击打开wxpython TextEntryDialog并获取用户的多个输入

 self.Bind(wx.EVT_BUTTON, self.OnAddNew, self.add_new_btn) 

现在我有当用户点击该按钮add_new打开TextEntryDialog。我想让textentrydialog像这样的东西 Python, Using wxPython to get multiple input from user

我该怎么做?我需要在`def OnAddNew(self,event)中粘贴该代码: 这是我的代码的pastebin链接:https://pastebin.com/UEYscgFa 我已经在函数内创建了类,那么是否可以这样做?

+0

请记住!你只能接受一个答案,而不是两个! –

回答

1

不!
GetData本身就是一类。
该代码已经为您提供了该方法。 MyFrame全是绒毛,创建一个独立的工作示例。

def OnButton(self,event): 
    dlg = GetData(parent = self.panel) 
    dlg.ShowModal() 
    if dlg.result_name: 
     self.log.AppendText("Name: "+dlg.result_name+"\n") 
     self.log.AppendText("Surname: "+dlg.result_surname+"\n") 
     self.log.AppendText("Nickname: "+dlg.result_nickname+"\n") 
    else: 
     self.log.AppendText("No Input found\n") 
    dlg.Destroy() 

编辑:我不明白的地方,我的意见的说明躲避你,但为我的罪,这是你的代码清理和编辑作为评论。

import sqlite3 
import wx 
import os 

class Example(wx.Frame): 
    def __init__(self, parent, title): 
     super(Example, self).__init__(parent, title=title, size=(1000,800)) 
     self.inter_list = list() 
     self.plot_list = list() 
     self.InitUI() 
     self.Layout() 
     self.Centre() 
     self.Show() 

    def InitUI(self): 
     self.p = wx.Panel(self) 
     bs = wx.BoxSizer(wx.VERTICAL) 
     gs = wx.GridSizer(10, 18, 5, 5) 
     bs.Add(gs, 1, wx.EXPAND) 
     self.search_btn=wx.Button(self.p,-1,"Search!") 
     self.search_btn.Bind(wx.EVT_BUTTON, self.OnSearch, self.search_btn) 
     bs.Add(self.search_btn,0,wx.ALIGN_CENTER) 
     self.p.SetSizer(bs) 

    def OnSearch(self, event): 
     dlg = GetData(parent = self.p) 
     dlg.ShowModal() 
     if dlg.result_name: 
      print "Name: "+dlg.result_name+"\n" 
      print "Surname: "+dlg.result_surname+"\n" 
      print "Nickname: "+dlg.result_nickname+"\n" 
     else: 
      print "No Input found\n" 
     dlg.Destroy() 

class GetData(wx.Dialog): 
    def __init__(self, parent): 
     wx.Dialog.__init__(self, parent, wx.ID_ANY, "Name Input", size= (650,220)) 
     self.p = wx.Panel(self,wx.ID_ANY) 
     self.lblname = wx.StaticText(self.p, label="Name", pos=(20,20)) 
     self.name = wx.TextCtrl(self.p, value="", pos=(110,20), size=(500,-1)) 
     self.lblsur = wx.StaticText(self.p, label="Surname", pos=(20,60)) 
     self.surname = wx.TextCtrl(self.p, value="", pos=(110,60), size=(500,-1)) 
     self.lblnick = wx.StaticText(self.p, label="Nickname", pos=(20,100)) 
     self.nickname = wx.TextCtrl(self.p, value="", pos=(110,100), size=(500,-1)) 
     self.saveButton =wx.Button(self.p, label="Save", pos=(110,160)) 
     self.closeButton =wx.Button(self.p, label="Cancel", pos=(210,160)) 
     self.saveButton.Bind(wx.EVT_BUTTON, self.SaveConnString) 
     self.closeButton.Bind(wx.EVT_BUTTON, self.OnQuit) 
     self.Bind(wx.EVT_CLOSE, self.OnQuit) 
     self.Show() 

    def OnQuit(self, event): 
     self.result_name = None 
     self.Destroy() 

    def SaveConnString(self, event): 
     self.result_name = self.name.GetValue() 
     self.result_surname = self.surname.GetValue() 
     self.result_nickname = self.nickname.GetValue() 
     self.Destroy() 

app = wx.App() 
Example(None, title = 'Raman Spectroscopy Database') 
app.MainLoop() 
+0

,这给了我错误:NameError:全局名称'GetData'未定义,我想做出同样的textentrydialog,最后我会发送该文本以用于我的sqlite查询 –

+0

你可以在这里看到我的代码:https:// github .com/svnitHIMANSHU /拉曼光谱学数据库/ blob/master/RAMAN.py –

+0

1. GetData类你完全从你的代码中省略了它,2.你调用了面板'p',这样调用应该是'dlg = GetData(parent = self.p)',并且为了实现你需要将所有对'p'的引用改为'self.p'或者更具描述性的东西。 –