2014-11-22 2 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

мне было интересно, если это возможно, чтобы создать текстового ввода диалогового ввода бар

Вы, кажется, немного запутался здесь.

Вводная строка ввода текста не является диалогом. Это просто виджет (ака-контроль), в частности, TextCtrl.

A TextEntryDialog включает в себя TextCtrl и строку заголовка, а также заголовок и некоторые кнопки; вы не хотите ничего из этого, кроме, может быть, кнопки или двух. И у этого есть панель с некоторыми sizers, чтобы выложить вещи, но Вы не хотите этого; он даже не помещает кнопки рядом со строкой ввода. Это также окно верхнего уровня, которое вам опять не нужно. Что еще более важно, у него есть куча кода, который будет действовать как диалог, чтобы модально захватить весь интерфейс и не вернуться, пока пользователь не набрал что-то и не нажал кнопку, которую вы определенно не хотите.

Итак, единственное, что вы хотите из диалога является то, что вы хотите TextCtrl, и Button, вероятно, организованы вместе в Panel с Sizer, так что вы можете контролировать расположение. Итак, просто создайте их. Добавьте обработчик для кнопки, которая считывает значение ввода текста и что-то делает с ним, и все готово.

(То, что вы специально просите, способ разместить диалог внутри окна, невозможно, вы можете встроить окна верхнего уровня в дочерние окна или создать что-то, что действует как диалог но не на высшем уровне. но ни один из них легко, и ни то, что вы хотите здесь.)

+0

TextCtrl был именно тем, что я искал! Спасибо. – Basper82

+0

Похоже, я в замешательстве, но я думаю, что это больше связано со мной, не зная языка/терминологии, с помощью которых можно задать вопрос. Я все еще довольно новичок в кодировании и особенно в концепциях ООП. Как бы вы сформулировали вопрос по-другому? Еще раз спасибо! – Basper82

+0

@ Basper82: Хороший вопрос, но мне тяжело ставить себя на ноги. Название хорошее. Я предполагаю, что в первом абзаце следует спросить что-то вроде: «... создать панель ввода текстового ввода, например, в« TextEntryDialog », но без всего диалогового окна, только в главном окне»? – abarnert

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

Смежные вопросы