【问题标题】:How can I write multiple lines to a textbox using python win32?如何使用 python win32 将多行写入文本框?
【发布时间】:2011-08-01 15:22:57
【问题描述】:

我有一个带有文本框组件的 C 程序。我想让一个 python GUI 向这个文本框写入文本。目前,我可以使用以下方式写入文本框HWND

def winFunc(hwnd, lparam):
    s = win32gui.GetWindowText(hwnd)
    if s == "":
        win32gui.SendMessage(hwnd, win32con.WM_SETTEXT, 0, lparam)

hwnd = win32gui.FindWindow("Graph Program", None)
win32gui.EnumChildWindows(hwnd, winFunc, text)

此代码会将文本写入文本框,但不能将换行符上的文本附加到文本框。是否可以读取当前文本框中的文本,或者是否可以将文本添加到文本框中?我是使用 Windows API 的新手。另外,是否可以将文本写成不同的颜色?文本框类是RICHEDIT20A

【问题讨论】:

    标签: python c winapi textbox


    【解决方案1】:

    附加文字

    1. 发送EM_SETSEL 消息将选择移动到富编辑控件的末尾。使用WM_GETTEXTLENGTH 找出编辑控件中有多少个字符。
    2. 发送EM_REPLACESEL 消息以替换选择。如果选择点在控件的末尾,则替换与追加相同。

    不要尝试使用WM_GETTEXTWM_SETTEXT,因为它很快就会变得低效,更不用说格式没有保留的事实。

    格式化文本

    使用EM_SETCHARFORMAT 格式化文本。更多详情请访问MSDN

    【讨论】:

    • 我仍然找不到更改文本颜色的方法,以便每个附加的行都是 python 中的新颜色。我找不到使用 python 调用 EM_SETCHARFORMAT 的方法。
    • 我在想 win32gui.SendMessage(hwnd, EM_SETCHARFORMAT, SCF_SELECTION, format) 但我也不知道如何(在 python 中)指定 Charformat 结构。
    • 我认为您可能需要使用 ctypes 结构类来复制CHARFORMAT。我还要指出,您应该一次问一个问题。您询问了有关附加文本和格式化的问题。
    • 我发布了一个关于颜色格式的新问题。 stackoverflow.com/questions/6903692/…
    • @gh4x 很好,我认为这正是我们应该做的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多