2016-04-02 7 views
1

私は、Tkhtmlウィジェットとテキストウィジェットをttk :: panedwindowの上に重ね合わせて表示するスクリプトを作成しています。両方のウィジェットは垂直方向と水平方向にスクロール可能です。ユーザーがテキストウィジェットをクリアできるようにするボタンもあります。Tkを使ってウィンドウサイズを設定するタイミングと方法

私は、Ubuntuを実行するラップトップでいくつかの開発を行っています。ウィンドウマネージャーは、2x2配列の4つのデスクトップワークスペースを許可しています。GUIが最初に表示されたとき、下の5分の1が私が使用しているワークスペースから下に出ます。ウィンドウをサイズ変更して画面上に収まるようにするには、画面のサイズを変更する必要があります。

(私は思う)これは、ウィンドウを最初に表示したときにスクリプトを実行できるように、これを行う方法、つまり適切なイベントにバインドする方法をよく知っています。 "適切なイベント"が<Map>であると信じていましたが、ウィンドウが最初にマップされたときに、2つのウィジェットの高さはゼロでした([winfo height]によって報告されています)。私は<Expose>へのバインドを試みましたが、これはうまくいくようです([winfo height]は賢明な数字を返します)。

質問1:どのイベントをバインドする必要がありますか?

結合火災は、[wm geometry]は815x1029 + 49 + 24などのジオメトリを報告し、[winfo height] 600及び366、及び[wm screenheight]のような2つのウィジェット二高さをレポートが返さIは、様々な他のビットがある知っている800の高さとGUIの中にいくつかの部分がありますので、最初のレイアウトでは63ピクセルは計り知れません。私は、サイズ変更後に同じ量のスペースが必要であると仮定しているので、815x737 + 49 + 24のジオメトリを要求する必要がありますが、私はスライバー(ほぼ水平のスクロールバー)を次のワークスペースに引き込みます。

私が知っていることは、すべてが画面上にきれいにフィットするとき、ジオメトリは815x717 + 49 + 24でなければならないことを知っています。したがって、「他のGUIのビットと部分 "と呼ばれる。

質問2:ファジーファクターの使用が必要なのは何ですか?

私はUbuntu 12.04.5 LTSでTk 8.6.1を使用しています。私はCompizウィンドウマネージャのバージョン0.9.7.12を使用しています。

更新

それは私がそれがスクロールバーと「クリア」ボタンを占めるだろうと、さまざまなペインではなく、Tkhtmlとテキストウィジェットの高さを見つけるべきことを私を襲いました。ペイン高さは当初は615と409ですが、これは、リクエストの高さを717という希望値にするために、ファッジファクタを20から78に増やす必要があることを意味します。トップレベルを要求する高さを予測する方法はありますか画面を埋めるためにトップレベルを得るために、私のパンされたウィンドウを含んでいますか?

+0

'winfo height'はウィンドウが完全に表示されるまで感知可能な数字を返しません。 'winfo reqheight'を使って、ウィンドウが表示される前にウィンドウの要求された高さを取得できます。 –

+0

@BradLanam私は ''イベントがウインドウが完全に表示されたときだけ起動すると予想していて、 '[winfo height]'はその時点で感知可能な数字を返さなかったことに驚いていました。 ''イベントは、回復するには合理的なデータがあるのに十分に遅れているように見えますが、特に、[Tkドキュメント](http://www.tcl。 tk/man/tcl8.6/TkCmd/bind.htm#M13): "クライアントアプリケーションがExposeイベントを処理する必要はありません。 – nurdglaw

+0

@BradLanam '[winfo reqheight]'は私が特定の高さを要求しないので役に立たないものを返しません。 – nurdglaw

答えて

0

<Map>にバインドすることをおすすめします。私はすべてのために待っていた:panedウィンドウ、メインのtkhtmlウィンドウ、テキストウィンドウとスクロールバーは、高さを調整しようとする前にマップされます。

Linuxの場合、[winfo screenheight .]は設定されているパネルを認識していないため、それらを減算する必要があります。ウィンドウを作成し、wm attributes . -zoomed 1を実行して、ウィンドウのジオメトリを取得することによって、実際のスクリーン高さを取得できます。

ウィンドウのタイトルバーと枠線がスペースを占めます。これらに必要なスペースは、[winfo geometry .][wm geometry .]の出力を比較することによって計算できます。

パインウィンドウのサッシの高さと余白とパディングもあります。 パンデウィンドウの高さを[winfo height .]から差し引くことで、これらの合計を計算できます。

これは、常に動作する1つの方法ですが、サイズが変わるとウィンドウが点滅するのをユーザーが見ているので、それほど魅力的ではありません。

  • ウィンドウのジオメトリを取得し、screenheightを解析
  • wm attributes . -zoomed 1)ウィンドウを最大化します。
  • ウィンドウを最大化する(wm attributes . -zoomed 0
  • ウィンドウジオメトリを取得し、スクリーン高さ を最大スクリーン高で置き換えます。
  • ウィンドウのジオメトリを設定します。
+0

@BradLanamの提案に感謝します。私は、あなたの提案がちらつきが解決策としてそれを排除することを含むと思う。私は、パンウィンドウの ''イベントにバインドする方法を変更しました。そして、高さをスクリーン高さから83のファッジファクタを引いたものに設定しました。これは、Ubuntu LinuxとWindowsの両方でうまくいきます。ペイントされたウィンドウの子の上の ''にバインドする必要はないようです。 – nurdglaw

関連する問題