我是wxPython的新手,我想知道是否可以在主窗口中创建文本输入对话框输入栏?我不想为用户输入创建新的框/窗口,而是希望有一个永久输入字段,就像 resultsInput 类提供PyQt QWidget布局一样。
我发现可以创建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 :(得分:0)
我想知道是否可以创建文本输入对话框输入栏
你似乎有点困惑。
文本输入栏不是对话框。它只是一个小部件(又名控制) - 特别是TextCtrl
。
TextEntryDialog
包括TextCtrl
,标题栏,标题和一些按钮;除了一两个按钮,你不需要任何其他东西。它有一个小组,有一些sizer来解决问题,但你不希望这样;它甚至没有将按钮放在入口栏旁边。它也是一个顶级窗口,你再次不想要它。更重要的是,它有一堆代码就像一个对话框 - 以模态方式接管整个界面,直到用户键入内容并单击一个你绝对不想要的按钮时才返回。
因此,您希望对话框中唯一需要的是TextCtrl
和Button
,可能是Panel
Sizer
组合在一起的{{1}}所以你可以控制布局。所以,只需创建它们。为按钮添加一个处理程序,该按钮读取文本输入的值并对其执行某些操作,然后就完成了。
(你特别要求的是一种在窗口中放置对话框的方法是不可能的;你可以将顶层窗口嵌入到子窗口中,或者你可以创建一些像对话框一样的东西但是不是顶级的。但这些都不容易,也不是你想要的。)
答案 1 :(得分: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()
这可能是你正在寻找的东西