2014-11-22 39 views
0

我是wxPython的新手,我想知道是否可以在主窗口中創建文本輸入對話框輸入欄?而不是必須爲用戶輸入創建一個新的框/窗口,我想有一個永久輸入字段,如類resultsInput規定了PyQt QWidget佈局。如何在我的主wxPython窗口上創建永久文本輸入輸入?

我看到有可能創建Multiple TextEntryDialog windows,但我們可以在單個窗口上執行此操作嗎?

這可能使用TextEntryDialog,還是我需要使用不同的類?

這是我到目前爲止有:

import wx 

class Window(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 'WX Python Window', size=(300, 200)) 
     panel = wx.Panel(self) 

     text_enter = wx.TextEntryDialog(None, "Please enter some text.", "Title", "Default") 
     if text_enter.ShowModal() == wx.ID_OK: 
      response = text_enter.GetValue() 
      wx.StaticText(panel, -1, response, (10, 50)) 

if __name__=='__main__': 
    app = wx.PySimpleApp() 
    frame = Window(parent=None, id=-1) 
    frame.Show() 
app.MainLoop() 

提前感謝!

回答

0

我想知道是否有可能創建一個文本輸入對話框輸入欄

你似乎是有點困惑在這裏。

文本輸入欄不是對話框。它只是一個小部件(aka控件),特別是一個TextCtrl

A TextEntryDialog包括TextCtrl,標題欄,標題和一些按鈕;除了一兩個按鈕之外,你不需要任何其他的東西。它有一個面板上有一些尺寸可以放置的東西,但是你不需要它;它甚至不會將按鈕放在輸入欄旁邊。這也是一個頂級窗口,你再次不想要。更重要的是,它有一堆代碼,像一個對話框 - 模式地接管整個界面,直到用戶輸入了一些內容並單擊了一個按鈕 - 這絕對不是你想要的。

所以,你想出來的對話框的唯一的事情就是你要一個TextCtrlButton,大概有Sizer組織一起在一個Panel這樣你就可以控制佈局。所以,只需創建這些。爲讀取文本輸入值的按鈕添加一個處理程序,並對其執行一些操作,然後就完成了。 (你所特別要求的,一種在窗口內放置對話框的方法是不可能的,你可以將頂層窗口嵌入到子窗口中,或者你可以創建一個像對話框一樣的東西但不是頂級,但這些都不是容易的,也不是你想要的這裏。)

+0

TextCtrl正是我正在尋找的!謝謝。 – Basper82 2014-11-22 00:52:02

+0

看起來我很困惑,但我認爲它更多的與我不知道用來問這個問題的術語/術語有關。我對編碼還很陌生,特別是面向對象的概念。 您如何以不同的方式表達這個問題? 再次感謝! – Basper82 2014-11-22 00:54:36

+0

@ Basper82:很好的問題,但我很難把自己放在你的鞋子裏。標題很好。我想第一個段落應該問這樣的問題:「...創建一個文本輸入欄,就像'TextEntryDialog'中的那個,但沒有整個對話框,只是在主窗口中」? – abarnert 2014-11-22 01:00:23

0

這裏是東西

import os 
FPATH = os.path.expanduser("~/.my_username") 
class SavedTextCtrl(wx.TextCtrl): 
    def __init__(self,*args,**kw): 
     self.save_action = kw.pop("save_action",lambda:open(FPATH,"wb").write(self.GetValue())) 
     self.load_action = kw.pop("load_action",lambda:self.SetValue(
           open(FPATH,"rb").read() if os.path.exists(FPATH) else "") 
          ) 
     wx.TextCtrl.__init__(self,*args,**kw) 
     self.load_action() 
     self.Bind(wx.EVT_TEXT,lambda e:self.save_action()) 


class Window(wx.Frame): 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, parent, id, 'WX Python Window', size=(300, 200)) 
     sz = wx.BoxSizer(wx.HORIZONTAL) 
     sz.Add(wx.StaticText(self,-1,"Name:")) 
     self.text_ctrl = SavedTextCtrl(self,-1) 
     sz.Add(self.text_ctrl) 
     self.SetSizer(sz) 
     self.Layout() 
     self.Fit() 

,可能是那種你在找什麼

+0

太棒了!感謝這個例子。 – Basper82 2014-11-22 01:08:03

相關問題