Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定textCtrl是否滚动到缓冲区的末尾_Python_Wxpython_Wxtextctrl - Fatal编程技术网

Python 确定textCtrl是否滚动到缓冲区的末尾

Python 确定textCtrl是否滚动到缓冲区的末尾,python,wxpython,wxtextctrl,Python,Wxpython,Wxtextctrl,我有一个WXTEXTCRL元素,我想确定它是否垂直滚动到文本缓冲区的底部。看起来,函数GetScrollPos和GetScrollRange与GetScrollThumb结合使用以获取显示的行数是可行的,但是无论发生什么情况,GetScrollThumb都会返回0 如何确定textCtrl是否已滚动到底部?还有别的方法吗?GetScrollThumb返回的0是错误还是我的平台不支持 我在windows上,使用wxPython 4.0.4 msw(凤凰城)wxWidgets 3.0.5 以下是一个

我有一个WXTEXTCRL元素,我想确定它是否垂直滚动到文本缓冲区的底部。看起来,函数
GetScrollPos
GetScrollRange
GetScrollThumb
结合使用以获取显示的行数是可行的,但是无论发生什么情况,
GetScrollThumb
都会返回
0

如何确定textCtrl是否已滚动到底部?还有别的方法吗?
GetScrollThumb
返回的
0
是错误还是我的平台不支持

我在windows上,使用wxPython 4.0.4 msw(凤凰城)wxWidgets 3.0.5

以下是一个最小(非)工作示例:

#!/usr/bin/python
import wx


print(wx.version())


class TextWindow(wx.Frame):
    def __init__(self, parent):

        wx.Frame.__init__(
            self,
            parent,
            id=wx.ID_ANY,
            title=u"Window Title",
            pos=wx.DefaultPosition,
            size=(400, 200),
            style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
        )

        bSizer3 = wx.BoxSizer(wx.VERTICAL)

        starting_text = '\n'.join('Line %d' % x for x in range(1, 101))

        self.m_textCtrl3 = wx.TextCtrl(
            self,
            wx.ID_ANY,
            starting_text,
            wx.DefaultPosition,
            wx.DefaultSize,
            wx.TE_DONTWRAP | wx.TE_MULTILINE | wx.TE_READONLY,
        )

        self.m_textCtrl3.SetFont(
            wx.Font(
                9,
                wx.FONTFAMILY_MODERN,
                wx.FONTSTYLE_NORMAL,
                wx.FONTWEIGHT_NORMAL,
                False,
                "Consolas",
            )
        )

        self.m_textCtrl3.HideNativeCaret()

        bSizer3.Add(self.m_textCtrl3, 1, wx.ALL | wx.EXPAND, 0)

        self.m_staticText1 = wx.StaticText(
            self,
            wx.ID_ANY,
            '',
            wx.DefaultPosition,
            wx.DefaultSize,
            wx.ST_ELLIPSIZE_END,
        )
        self.m_staticText1.Wrap(-1)

        bSizer3.Add(self.m_staticText1, 0, wx.LEFT | wx.EXPAND, 5)

        self.SetSizer(bSizer3)
        self.Layout()

        # Connect Events
        self.m_textCtrl3.Bind(wx.EVT_PAINT, self.check_scroll_bar)

    def __del__(self):
        pass

    def check_scroll_bar(self, event):
        top_line = self.m_textCtrl3.GetScrollPos(wx.VERTICAL)
        line_count = self.m_textCtrl3.GetScrollRange(wx.VERTICAL)
        displayed_lines = self.m_textCtrl3.GetScrollThumb(wx.VERTICAL)
        scrolled_to_end = top_line + displayed_lines >= line_count
        print('%d/%d/%d' % (top_line, displayed_lines, line_count))
        self.m_staticText1.SetLabel(
            'NOT at the end' if not scrolled_to_end else 'at end')
        pass


def main():
    app = wx.App()
    tw = TextWindow(None)
    tw.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()