- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 wxPython-Phoenix
在 MS Windows 8.1 上编写一个计算器应用程序,其中我希望用户在其中一个参数字段中输入值时立即执行计算。为了实现这一点,我使用由任何参数字段生成的 wx.EVT_KILL_FOCUS 来生成触发计算方法的命令事件。一切工作正常,但参数字段中插入符号的外观(由 TextCtrl 小部件实现)。
通过 Tab 键或鼠标在某个字段上设置焦点并将其(再次通过 Tab 键或鼠标)移动到不同的字段后 - 插入符号从 TextCtrl 小部件中消失,再也不会返回!当您在该 TextCtrl 小部件上调用 GetCaret() 方法时,返回值为 None。
请参阅随附的示例。小部件仍然接受输入并显示它,但没有插入符号。
如何将插入符号恢复到正确的位置?或者一开始就不失去它?
我尝试在 TextCtrl 中设置新的插入符号,但它不遵循文本输入。由于应用程序需要具有强烈的交互性,因此我希望触发事件是失去焦点而不是按钮(以最大限度地减少点击次数)
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super(MyFrame, self).__init__(*args, **kwargs)
self.InitUI()
def InitUI(self):
# setting up the Input panel
panel = wx.Panel(self)
self.lbl1 = wx.StaticText(panel,wx.ID_ANY,'Some Text:')
self.txt1 = wx.TextCtrl(panel,wx.ID_ANY,style=wx.TE_RIGHT)
self.lbl2 = wx.StaticText(panel,wx.ID_ANY,'Some Other Text:')
self.txt2 = wx.TextCtrl(panel,wx.ID_ANY,style=wx.TE_RIGHT)
infgsz = wx.FlexGridSizer(2,2,15,15)
infgsz.AddMany([(self.lbl1,0,wx.ALIGN_LEFT),\
(self.txt1,0,wx.ALIGN_LEFT),\
(self.lbl2,0,wx.ALIGN_LEFT),\
(self.txt2,0,wx.ALIGN_LEFT)])
self.txt1.Bind(wx.EVT_KILL_FOCUS,self.OnInput)
self.txt2.Bind(wx.EVT_KILL_FOCUS,self.OnInput)
box = wx.BoxSizer(wx.HORIZONTAL)
box.Add(infgsz, flag= wx.EXPAND | wx.ALL, border=15)
panel.SetSizer(box)
self.SetSize((280, 140))
self.SetTitle('TextCtrl Demo')
self.Centre()
def OnInput(self, e):
if e.GetId() == self.txt1.GetId():
self.lbl2.SetForegroundColour(wx.ColourDatabase().Find('RED'))
self.lbl1.SetForegroundColour(wx.ColourDatabase().Find('BLACK'))
else:
self.lbl1.SetForegroundColour(wx.ColourDatabase().Find('BLUE'))
self.lbl2.SetForegroundColour(wx.ColourDatabase().Find('BLACK'))
self.Refresh()
def main():
app = wx.App()
frame = MyFrame(None)
frame.Show()
app.MainLoop()
if __name__ == '__main__':
main()
上面的应用程序显示 2 行文本。每行的左侧都有一个标签(wx.StaticText
小部件),右侧有一个 TextCtrl
小部件。当您在任一行的 TextCtrl
小部件中输入文本并将焦点移至另一个 TextCtrl
小部件时,相应的标签前景色(文本颜色)将更改为红色或蓝色,并且另一个标签更改为黑色。然而,在没有任何明显原因的情况下,插入符号从顶部 TextCtrl
小部件中消失,并且永远不会返回! (至少在 MS Windows 8.1 上)。
最佳答案
The documentation明确告诉你
The focus event handlers should almost invariably call wxEvent::Skip() on their event argument to allow the default handling to take place.
并继续解释说,不这样做可能会导致各种问题 - 例如您所观察到的问题。
将 e.Skip()
添加到您的事件处理程序中以修复它。
关于python - 为什么在焦点事件之后插入符号会从 TextCtrl 小部件中消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56538253/
已解决:感谢下面 Aya 的回答,我现在知道问题是由第 18 行的 self.panel = wx.Panel(self, -1) 引起的。我创建了一个面板,但没有在其上附加任何内容。原始问题描述仍如
我想要一个 wx.TextCtrl获取面板的整个剩余宽度。它放置了一个 wx.StaticText和一个 wx.Button在水平 wx.BoxSizer在垂直 wx.BoxSizer在 wx.lib
我正在寻找一种将 textctrl 字段中输入的文本转换为大写的方法。我尝试使用验证器并使用“ord”将键事件对象的值转换为大写字母字符值,但是我找不到任何“set”方法。我也许能够直接访问事件类变量
我正在寻找一种将 textctrl 字段中输入的文本转换为大写的方法。我尝试使用验证器并使用“ord”将键事件对象的值转换为大写字母字符值,但是我找不到任何“set”方法。我也许能够直接访问事件类变量
我正在使用 wxPython-Phoenix 在 MS Windows 8.1 上编写一个计算器应用程序,其中我希望用户在其中一个参数字段中输入值时立即执行计算。为了实现这一点,我使用由任何参数字段生
我写了这段代码: # -*- coding: utf-8 -*- import wx import wx.animate import wx.lib.agw.hyperlink as hl ID_BU
平台窗口 使用 Windows API 创建了一个控件:CreateWindowExW 并将其父级设置为面板 hwnd 但控件似乎无法正确处理方向键、回车键和制表键。 wxwidgets 上是否有任何
我正在开发一个 GUI 程序,我使用 AppendText 来更新多行文本框(由 wx.TextCtrl 组成)中的状态。我注意到每次在此框中写入一个新行,而不是顺利地将此行添加到末尾,框中的整个文本
我一定是使用了错误的术语进行谷歌搜索,因为我找不到我要找的东西。任何帮助表示赞赏。 如何写入 textctrl 中的特定行? 当前我的程序处理文件,处理后文件会在文本 ctrl 中列出。我想要达到的目
所以,我正在尝试使用 wxPython 编写一个程序,该程序将有一个带有选项卡的笔记本,每个选项卡都让用户在文本框中输入一些数据。这是一个与物理相关的项目,所以我希望每个文本框在显示应输入的单位后都有
有人知道如何使用 wxPython 在 TextCtrl 对象中创建自定义上下文菜单吗? 目前,我可以创建一个自定义菜单,但这个菜单出现在鼠标光标位置 ,当原来的出现在文本光标位置 时当按下[菜单]键
我想做一个没有边框的 wx.TextCtrl wxpython :P我该怎么做? 最佳答案 wx.BORDER_NONE 怎么样: t1 = wx.TextCtrl(self, -1, "my tex
我在将 wx.TextCtrl 中的文本居中时遇到困难(如下图所示)。 -- 出于某种原因,它总是打印左对齐,而不是居中。 有人可以指出正确的“样式”或者告诉我哪里做错了吗? import wx cl
我有多行,在wxpython中只读TextCtrl我知道如何使用 设置值 myTextCtrl.SetValue('hello') 但这会改变我之前在我的 TextCtrl 中的任何内容...如何添加
如何从 TextCtrl 框中获取字符串?下面是练习代码: import wx class citPanel(wx.Panel): def __init__(self, parent, id)
我在我的 python 应用程序中使用了一个模块,该模块使用日志记录模块写入大量消息。最初我在控制台应用程序中使用它,使用控制台处理程序很容易让日志输出显示在控制台上。现在我已经使用 wxPython
我有一个文本(有多行),需要将其放入 wxPython TextCtrl 中。 问题是其中一些行包含无法打印的字符。 我的解决方案是使用 AppendText,并 try catch 有问题的行。 当
我正在 wxpython 中为 wx.TextCtrl 创建一个子类。 我希望此类将额外数据添加到 wx.TextCtrl 小部件,类似于将额外数据添加到 ComboBox 或 ListBox 的方式
我正在编写一个与 Skype 集成的聊天程序。我已经完成了大部分跑腿工作,但我在 wxPython 中的 Notebook 控件方面遇到了问题。我想当用户发送消息时在笔记本上创建一个新选项卡,我正在工
我的代码如下 log = wx.TextCtrl(面板, wx.ID_ANY, size=(300,100), 样式 = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCRO
我是一名优秀的程序员,十分优秀!