كيف أقوم بتحديث النص متعدد الخطوط wx.textctrl بسلاسة؟

StackOverflow https://stackoverflow.com/questions/3566603

  •  01-10-2019
  •  | 
  •  

سؤال

أنا أعمل على برنامج واجهة المستخدم الرسومية ، وأنا أستخدم AppendText لتحديث الحالة في مربع نص متعدد الخطوط (مصنوع من wx.textctrl). لقد لاحظت في كل مرة أن هناك خطًا جديدًا مكتوبًا في هذا المربع ، بدلاً من إضافة هذا الخط بسلاسة إلى النهاية ، تختفي النصوص بأكملها في المربع (ليس حقيقيًا ، بصريًا) وعلي النقر فوق زر التمرير للتحقق من خط الحالة المحدثة حديثًا/المكتوب. لماذا يحدث هذا؟ هل يجب أن أضيف بعض الأنماط؟ أتمنى أن تساعدني يا رفاق.

هذا هو رمز العينة الخاص بي:

import wx
import thread
import time

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, id = -1, title = "Testing", pos=(350, 110), size=(490,530), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX)
        panel = wx.Panel(self)

        self.StartButton = wx.Button(parent = panel, id = -1, label = "Start", pos = (110, 17), size = (50, 20))
        self.MultiLine = wx.TextCtrl(parent = panel, id = -1, pos = (38, 70), size = (410, 90), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_AUTO_URL)

        self.Bind(wx.EVT_BUTTON, self.OnStart, self.StartButton)

    def OnStart(self, event):
        self.StartButton.Disable()
        thread.start_new_thread(self.LongRunning, ())

    def LongRunning(self):
        Counter = 1
        while True:
            self.MultiLine.AppendText("Hi," + str(Counter) + "\n")
            Counter = Counter + 1
            time.sleep(2)


class TestApp(wx.App):
    def OnInit(self):
        self.TestFrame = TestFrame()
        self.TestFrame.Show()
        self.SetTopWindow(self.TestFrame)
        return True

def main():
    App = TestApp(redirect = False)
    App.MainLoop()

if __name__ == "__main__":
    main()
هل كانت مفيدة؟

المحلول

حاول استدعاء Refresh() طريقة على textCtrl

تحديث:

تم طرح سؤال بالفعل بشأن هذه المشكلة ، هنا هو الجواب الذي يحلها إلى حد كبير ، غير مثالية ولكن ربما يمكنك تحسينها ...

هنا هو مؤشر ترابط من القائمة البريدية لـ Wxpython فيما يتعلق بالمشكلة التي قد تكون ذات أهمية بالنسبة لك.

نصائح أخرى

جرب هذا:

self.logs = wx.TextCtrl(self, id=-1, value='', pos=wx.DefaultPosition,
                            size=(-1,300),
                            style= wx.TE_MULTILINE | wx.SUNKEN_BORDER)
self.logs.AppendText(text + "\n")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top