Форум сайта python.su
Пытаюсь создать переход по полям формы по нажатию клавиши Enter. В многострочных полях нажатие вызывает перенос строки. Как мне запретить выполнять это действие или прописать свое?
Вот мои попытки:
def famEnter(self, evt):
if evt.GetKeyCode() == 13:
#wxKeyEvent(wx.WXK_BACK)
#s = self.fam.GetValue().split('\n')
#self.fam.EmulateKeyPress(wxKeyEvent(wx.WXK_BACK))
self.droj.SetFocus()
#self.fam.EmulateKeyPress(wxKeyEvent(wx.WXK_TAB))
#self.Update()
#self.OnEnter(self.fam)
evt.Skip()
Все что пытаюсь прописать, он успевает выполнить вначале, а потом добавляет перенос строки.
Офлайн
Кажется, почти никак. wx.TE_PROCESS_ENTER запрещен для многострочных полей. Я сумел бы на Винде проломиться и навесить свою реакцию, если очень нужно. Через windows subclassing и если это не RichEdit. Но - не вполне тривиально.
Если нет других способов и ОЧЕНЬ нужно - попробую в свободное время.
Офлайн
Андрей Светлов
Эта задача не стоит Вашего свободного времени)) спасибо! Есть пару полей, которые никак не заменить однострочными, буду искать другие методы.
Офлайн
У меня получилось, даже сама не поняла, что помогло)) А чтобы не говорили, что я плохо ставлю задачи, вот вам работающий пример:
#!/usr/bin/env python
# -*- coding: cp1251 -*-
“”“Формы для клиентской базы”“”
import wx
from wxPython.wx import *
import string
class FrameFiz(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title,
size=(450, 350))
wind = wxSplitterWindow(self, -1, style=wxSP_3D|wxSP_BORDER)
panel = wxScrolledWindow(wind, -1, style=wx.TAB_TRAVERSAL)
panel1 = wxPanel(wind, -1)
Font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)
Font1 = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)
panel.SetScrollRate(10, 10)
wind.SplitHorizontally(panel, panel1)
l_num = wx.StaticText(panel, -1, “ Номер клиента”)
l_num.SetFont(Font1)
self.num = wx.TextCtrl(panel, -1, “001”)
self.num.SetFont(Font)
l_fam = wx.StaticText(panel, -1, “ ФИО”)
l_fam.SetFont(Font1)
self.fam = wx.TextCtrl(panel, -1, “Пупкин Вася”, style=wx.TE_MULTILINE)
self.fam.SetFont(Font)
l_droj = wx.StaticText(panel, -1, “ Дата рождения”)
l_droj.SetFont(Font1)
self.droj = wx.TextCtrl(panel, -1, “01.01.1901”)
self.droj.SetFont(Font)
l_mroj = wx.StaticText(panel, -1, “ Место рождения”)
l_mroj.SetFont(Font1)
self.mroj = wx.TextCtrl(panel, -1, “г. Ханты-Мансийск”, style=wx.TE_MULTILINE)
self.mroj.SetFont(Font)
l_graj = wx.StaticText(panel, -1, “ Гражданство”)
l_graj.SetFont(Font1)
self.graj = wx.TextCtrl(panel, -1, “РФ”)
self.graj.SetFont(Font)
self.btnsave = wx.Button(panel1, -1, “Сохранить запись”)
self.btnsave.SetFont(Font)
self.Bind(wx.EVT_BUTTON, self.OnButtonSave, self.btnsave)
self.btnno = wx.Button(panel1, -1, “Отмена”)
self.btnno.SetFont(Font)
self.Bind(wx.EVT_BUTTON, self.OnButtonNo, self.btnno)
self.fam.Bind(wx.EVT_CHAR, self.famEnter)
self.droj.Bind(wx.EVT_CHAR, self.drojEnter)
self.mroj.Bind(wx.EVT_CHAR, self.mrojEnter)
self.graj.Bind(wx.EVT_CHAR, self.grajEnter)
self.fam.Bind(wx.EVT_TEXT, self.OnfamEnter)
self.mroj.Bind(wx.EVT_TEXT, self.OnmrojEnter)
wind.SetMinSize((400,500))
panel1.SetMinSize((400,30))
panel.SetMinSize((400,470))
sizer_1 = wx.BoxSizer(wxVERTICAL)
sizer_2 = wxBoxSizer(wxVERTICAL)
sizer_3 = wxBoxSizer(wxHORIZONTAL)
sizer_1.AddMany([(l_num, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.num, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(l_fam, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.fam, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(l_droj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.droj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(l_mroj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.mroj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(l_graj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.graj, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)])
sizer_2.Add(sizer_3, -1, wx.EXPAND, 0)
sizer_3.AddMany([(self.btnsave, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0),
(self.btnno, -1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)])
wind.SetAutoLayout(True)
panel.SetSizer(sizer_1)
panel1.SetSizer(sizer_2)
self.Layout()
self.Centre()
def OnButtonSave(self, evt):
dl = wx.MessageDialog(self, ‘Вы уверены, что хотите сохранить эту запись?’,'Сообщение', wx.OK | wx.CANCEL | wx.ICON_QUESTION)
if dl.ShowModal() == wx.ID_OK:
print ‘А вот и не сохраню!’
dl.Destroy()
else:
dl.Destroy()
evt.Skip()
def OnButtonNo(self, evt):
self.Destroy()
evt.Skip()
def OnfamEnter(self, evt):
tmp = self.fam.GetValue().split('\n')
self.fam.SetValue(''.join(tmp))
self.Update()
return
def OnmrojEnter(self, evt):
tmp = self.mroj.GetValue().split('\n')
self.mroj.SetValue(''.join(tmp))
self.Update()
return
def famEnter(self, evt):
if evt.GetKeyCode() == 13:
self.fam.GetLastPosition()
self.droj.SetFocus()
evt.Skip()
def drojEnter(self, evt):
if evt.GetKeyCode() == 13:
self.mroj.SetFocus()
evt.Skip()
def mrojEnter(self, evt):
if evt.GetKeyCode() == 13:
self.graj.SetFocus()
evt.Skip()
def grajEnter(self, evt):
if evt.GetKeyCode() == 13:
self.adreg.SetFocus()
evt.Skip()
class MyApp(wxApp):
def OnInit(self):
wxInitAllImageHandlers()
frame = FrameFiz(None, “Клиенты - физ. лица”)
frame.num.Enable(False)
frame.Show()
return 1
app = MyApp(redirect=True)
app.MainLoop()
Офлайн