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