GUIで二つのテキスト画面を表示して、スクロールを同期させれず苦戦しています。
wxpythonのTextCtrl(style=wx.TE_MULTILIN)を二つ用意して、
スクロールイベントを利用して、スクロールの挙動を同期させようとしていますが
こちらは可能なのでしょうか。
grid.Scrollを利用するとスクロールのpositionを移動でき、
実現できそうだったのですが、TextCtrlに適用することができませんでした。
※追記
コメントを受けてShowPositionを利用して作ってみましたが、
スクロールが同期できませんでした。
スクロールイベントにGetPositionをつけて座標を確認しましたが
スクロールしても(0,0)のままでした。
こちらが原因で同期できないのでしょうか。
python
1import wx 2 3class MyForm(wx.Frame): 4 # ---------------------------------------------------------------------- 5 def __init__(self): 6 wx.Frame.__init__(self, None, wx.ID_ANY,"RT_diff") 7 8 splitter = wx.SplitterWindow(self, wx.ID_ANY, style=wx.SP_LIVE_UPDATE) 9 splitter.SetMinimumPaneSize(100) 10 self.panel1 = wx.Panel(splitter, wx.ID_ANY, style=wx.BORDER_SUNKEN) 11 self.panel2 = wx.Panel(splitter, wx.ID_ANY, style=wx.BORDER_SUNKEN) 12 self.text_1 = wx.TextCtrl(self.panel1, wx.ID_ANY, style=wx.TE_MULTILINE|wx.VSCROLL) 13 self.text_2 = wx.TextCtrl(self.panel2, wx.ID_ANY, style=wx.TE_MULTILINE|wx.VSCROLL) 14 self.text_1.Bind(wx.EVT_SCROLLWIN, self.onScrollWin1) 15 self.text_2.Bind(wx.EVT_SCROLLWIN, self.onScrollWin2) 16 17 f = open("ip-test01.txt","r") 18 line = f.readlines() 19 a = "" 20 for line_list in line : 21 a = a + line_list 22 self.text_1.SetValue(a) 23 self.text_2.SetValue(a) 24 25 lbox_layout = wx.BoxSizer(wx.VERTICAL) 26 lbox1 = wx.BoxSizer(wx.HORIZONTAL) 27 lbox1.Add(self.text_1, -1,wx.EXPAND) 28 lbox_layout.Add(lbox1,-1,wx.EXPAND) 29 30 rbox_layout = wx.BoxSizer(wx.VERTICAL) 31 rbox1 = wx.BoxSizer(wx.HORIZONTAL) 32 rbox1.Add(self.text_2, -1,wx.EXPAND) 33 rbox_layout.Add(rbox1,-1,wx.EXPAND) 34 35 36 self.panel1.SetSizer(lbox_layout) 37 self.panel2.SetSizer(rbox_layout) 38 39 splitter.SplitVertically(self.panel1,self.panel2) 40 41 def onScrollWin1(self, event): 42 self.text_2.ShowPosition(event.Position) 43 print(self.text_1.GetPosition()) 44 def onScrollWin2(self, event): 45 self.text_1.ShowPosition(event.Position) 46 print(self.text_2.GetPosition()) 47 event.Skip() 48# ---------------------------------------------------------------------- 49# Run the program 50if __name__ == "__main__": 51 app = wx.App(False) 52 frame = MyForm() 53 frame.Show() 54 app.MainLoop()
回答1件
あなたの回答
tips
プレビュー