質問

WinXPとWXPYTHON(WXPYTHON 3.1、Python 2.6)を使用して、TextCtrlからテキストをコピーするGUIプログラムを作成し、statictextを含むスクロール可能なパネルに作成します。これはすべて正常に機能しますが、スクロールされた部分がまったく正しく機能しません。リアルタイムで更新されないようです。ウィンドウをummaximizeして再度最大化すると、スクロールバーが更新されます。ただし、TextCtrlの入力を再度開始すると(イベントを使用してScrollablePanel内のstatictextにテキストを追加します)、パネルのスクロールバーは最小限に抑えられない限り更新されません。

質問は、どのようにしてスクロールパネルをリアルタイムで更新できるかということです。テキストがTextCtrlで変更されるのを待っているイベントのセットアップがあります。そこでは、アップデートが必要だと思います。更新、更新、レイアウトを試してみましたが、あまりしていないようです。より大きな質問は、ウィンドウを最小化し、それを再度最大化するのは何ですか、その更新、更新、レイアウトはそうではないのですか?これで助けてくれてありがとう。申し訳ありませんが、コードを投稿できません、Confidential。私はあなたが私に与えることができるどんな助けにも感謝します。私は通常、検索することで自分で問題を見つけることができますが、この種のことについてのドキュメントを見つけていません。これは私にとって初めてですが、私はあなたの答えから多くの助けを得ます。再度、感謝します! :)

追加した:

import wx
import wx.lib.inspection
from wx.lib.scrolledpanel import ScrolledPanel

class MyFrame( wx.Frame ):

    # TODO: add all class variables here for convention
    tin         = None

    hsizer      = None

    def __init__( self, parent, ID, title ):
        wx.Frame.__init__( self, parent, ID, title,
                     wx.DefaultPosition, wx.Size( 200, 150 ) )

        self.InitWidgets()
        self.InitBindings()
        self.InitFinish()


    def InitWidgets( self ):
        self.hsizer = wx.BoxSizer( wx.HORIZONTAL )

        # Add the TextCtrl
        vsizer = wx.BoxSizer( wx.VERTICAL )
        self.tin = wx.TextCtrl( self, style=wx.TE_MULTILINE )
        vsizer.Add( self.tin, 1, wx.EXPAND  )
        self.hsizer.Add( vsizer, 3, wx.TOP|wx.LEFT|wx.BOTTOM|wx.EXPAND, border=20 )

        # Add ScrolledPanel widget
        self.hsizer.Add( wx.Size( 200, -1 ), 1 )
        vsizer2 = wx.BoxSizer( wx.VERTICAL )
        self.test_panel = ScrolledPanel( self )
        self.test_panel.SetupScrolling()

        # Setup static text ( label ) tvs is the 
        # vertical sizer inside the panel
        self.tvs = wx.BoxSizer( wx.VERTICAL )
        self.tin2 = wx.StaticText( self.test_panel )
        self.tvs.Add( self.tin2, 0, wx.EXPAND )
        vsizer2.Add( self.test_panel, 1, wx.EXPAND  )
        self.hsizer.Add( vsizer2, 3, wx.TOP|wx.LEFT|wx.BOTTOM|wx.EXPAND, border=20 )

        # Add Spacer
        self.hsizer.Add( wx.Size( 500, -1 ), 1 ) 

    def InitBindings( self ):
        self.tin.Bind( wx.EVT_TEXT, self.TextChange ) 

    def InitFinish( self ):

        # Setup sizers and frame
        self.SetAutoLayout( True )
        self.test_panel.SetAutoLayout( True )
        self.test_panel.SetSizer( self.tvs )
        self.SetSizer( self.hsizer )
        self.Layout()
        self.Update()
        self.Maximize()

    def TextChange( self, event ):

        #self.CopyValues()
        self.tin2.Label = self.tin.GetValue()
        self.Layout()
        self.Update()
        self.test_panel.Refresh()
        self.test_panel.Update()
        print self.tin.GetValue().split( "\n" )


class MyApp( wx.App ):

    fr = None

    def OnInit( self ):
        self.fr = MyFrame( None, -1, "TitleX" )
        self.fr.Show( True )
        self.SetTopWindow( self.fr )
        return True

app = MyApp( 0 )
app.MainLoop()

def main():

    win = 1
if ( __name__ == "__main__" ):
    main()    

一般的に、これはプログラムの目的をあまりにも与えずに起こっていることです。パネルのサイズを充填していた領域よりも大きくする仮想サイズの思考をセットアップし、永続的なスクロールバーがあることを望んでいますが、そうではありません。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top