>> ") 时,它还会附加一个新行。用户可以退格到正确的行,但这看起-6ren">
gpt4 book ai didi

python - 在 wxpython TextCtrl.WriteText() 之后防止换行

转载 作者:行者123 更新时间:2023-11-28 21:29:38 28 4
gpt4 key购买 nike

我的应用程序有一个类似 shell 的控制台,它在每个命令后都会提示“>>>”。问题是每次我的 shell WriteText(">>> ") 时,它还会附加一个新行。用户可以退格到正确的行,但这看起来很糟糕。有办法解决吗?

最佳答案

我怀疑您正在声明您的 TextCtrl时尚wx.TE_PROCESS_ENTER然后绑定(bind)EVT_TEXT_ENTER事件 - 只是因为我在尝试时遇到了同样的问题。

我的第一 react 是编写一个方法来处理 wx.EVT_TEXT_ENTER然后将使用 TextCtrl:Remove()方法。不幸的是,这种方法似乎只能删除可见字符。我的下一个想法是使用 EmulateKeyPress()方法与退格键( WKX_BACK )一起删除换行符。这可能是可行的,尽管我想不出一个好方法来欺骗 wx.KeyEvent (不能只使用 event.m_keyCode 因为 EVT_TEXT_ENTER 发送 CommandEvent ,而不是 KeyEvent )所以我放弃了这种方法......呃,我的意思是这个解决方案留给读者作为练习.

wx.EVT_TEXT_ENTERCommandEvent最后得出了第三个有效的角度。而不是绑定(bind)wx.EVT_TEXT_ENTER ,我绑定(bind)wx.EVT_CHAR并放入经过特殊处理的逻辑Return键(ASCII 键代码 13)。然后我计划实现EmulateKeyPress()我之前谈到过,但是当我删除 wx.TE_PROCESS_ENTER 时从TextCtrl样式中,我发现\n不再被 secret 添加。代码如下:

import wx

class TestRun(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self, parent, title="StackO Test", size=(400,400))
self.control = wx.TextCtrl(self, id=wx.ID_ANY, style=wx.TE_MULTILINE)
self.control.Bind(wx.EVT_CHAR, self.OnPress)

self.Show(True)

def OnPress(self, event):
if event.GetKeyCode() == 13:
self.control.WriteText('\n>>>')
else:
event.Skip()

if __name__ == '__main__':
app = wx.App(False)
TestRun(None)
app.MainLoop()

event.Skip()线路至关重要;在我对此进行研究的过程中,我了解到 KeyEvent通常后跟 CharEventCharEvent是将字符写入 TextCtrl 的部分。当你拦截KeyEvent时,CharEvent仅当您明确这样做时才会调用 - event.skip()因此,如果您想要 TextCtrl ,这一点至关重要在其他方面表现正常。如果没有它,任何不等于 ASCII 键码 13 的键盘输入都不会执行任何操作。

从我的测试来看,声明 TextCtrl 似乎有些问题。有风格wx.TE_PROCESS_ENTER这使得它在每次调用 WriteText() 后打印换行符。我的方法可以解决这个问题,尽管您需要做更多的工作来确保插入点始终位于正确的位置等。

祝你好运!

关于python - 在 wxpython TextCtrl.WriteText() 之后防止换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com