問題タブ [sizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
layout - パネルが別のwx.sizer内で展開されている場合、wx.panelのwx.sizerを展開するにはどうすればよいですか?
GridBagSizerが関連付けられているwx.Panelがあります。このパネルは別のサイザー(BoxSizer)内に配置され、その追加には展開フラグがあります。これは、パネルがサイザーの全幅を占めることを意味します。これはすばらしいことです。...しかし、パネルの内部サイザーは現在パネルを埋めていません。
コンポーネントを追加するときに、内部サイザーのフラグをwx.Expand | wx.ALLに設定しようとしましたが、機能しませんでした。パネルが拡張されたときにサイザーがパネルと同じ幅を維持するようにする方法を知っている人はいますか?
編集:GridBagSizerを含むパネルを作成する私のコード:
python - WxPython:FoldPanelBarは実際には折りたたまれていません
FoldPanelBarを使用して次のコードを記述しました。
折りたたむ前は次のようになります。
代替テキストhttp://img23.imageshack.us/img23/4309/before.gif
右側のテキストボックスは折り畳みパネルにあるため、矢印をクリックすると消えます。ただし、次のようになります。
代替テキストhttp://img22.imageshack.us/img22/6306/afterz.gif
左側のテキストボックスは、フレーム全体を埋めるためにサイズが大きくなると予想していました。
私は何が間違っているのですか?
wxpython - wxPython sizer wxGridSizer の親クラス メソッドが奇妙にアクセスできない
wxPython ツールキットに問題があります。wx.GridSizer オブジェクトを使用して、ステータス情報を表示するグリッドを配置しています。このグリッドを更新する必要があるため、いくつかの方法を考え出しました。私が好むのは、更新が必要なテキストを単純に更新/更新することです。そのため、wxStaticText オブジェクトをサイザーから切り離し、新しい wxStaticText オブジェクトで上書きして、オブジェクトを以前のインデックスでサイザーに挿入し直すことができます。
より良い方法は、wxGridSizer の親クラスである wxSizer を使用することです。このクラスには「Replace」というメソッドがあり、ウィジェット内のアイテムを取り出したり挿入したりせずに置き換えることができます。このメソッドを使用しようとすると、非常に奇妙なエラーが発生します。エラーが続くコードは次のとおりです。
したがって、突然置換はオプションではありません。先ほど紹介した Insert メソッドは、sizer の親クラス wxSizer のメソッドであることを覚えておいてください。したがって、私が使用しているサイザー wxGridSizer が、親クラスのメソッド (継承され、サブクラス化された) Insert を正常に呼び出すことができることが証明されています。
では、Replace メソッドを同様の方法で呼び出せないのはなぜでしょうか。
custom-controls - wxwidgets カスタム コントロールのサイズを設定できません。
wxControl から派生したカスタム コントロールがあり、垂直方向のサイザーを含むダイアログ内にあります。
しかし、何らかの理由で、カスタム コントロールのサイズが (80,100) に設定されています。そのサイズを超えてダイアログのサイズを変更すると、指定したとおりに中央に配置されます。
編集: Visual Studio 2005 を搭載した Windows Vista で wx 2.8.9 を使用しています。
何が欠けている可能性がありますか?
resize - wxwidgets は、子コントロールを非表示/表示した後にサイザーのサイズを変更します
私は wxWindow を持っています。その中に wxBoxSize (Vertical) があります。sizer には 3 つの子コントロールがあります。
3 つの子コントロールの 1 つを非表示にして、サイザーとその親のサイズを自動的に変更できるようにしたいと考えています。たとえば、サイザーの 1 つの子コントロールを非表示にすると、ウィンドウが 200 ピクセル減少します。
現在、特定のコントロールを非表示にし、ウィンドウのサイズを変更する方法は次のようになります: (ハードコードされた、醜い)
python - wxPython GridSizerがパネルに接続されていませんか?
作業中のゲームのレベルエディタを作成しようとしています。フラットファイルからデータを取得し、バイトごとの検索に基づいて、事前設定されたタイルからグリッドを組み立てます。アプリのこの部分は問題がないはずです。問題は、00からFFまでの16x16グリッドのテストタイルをロードするだけのエディターのテストバージョンが間違った場所にロードされていることです。
例:アプリフレームは次のようになります。
私の恐ろしいASCIIアートを言い訳にすると、フレームには基本的に水平サイザーがあり、2つの垂直サイザーがあります。1つは左用、もう1つは右用です。これらのそれぞれにはパネルがあり、それぞれに2番目のサイザーがあります。左側のサイザーには64ピクセル幅のスペーサーがあり、グリッドサイザーは後で画像で埋められます。右の2番目のサイザーはユーザーサイズですが、そこにあるスペーサーを介して最低960ピクセル、次にコードのレベルの幅と高さによって決定されるグリッドサイザーです。
基本的に、各サイドには、メインフレームにあるサイザーの半分のサイザーの内側にあるパネル上にある、セクションの幅のスペーサーを持つサイザーの内側にグリッドサイザーがあります。時々私を混乱させるので、これが理にかなっていることを願っています:P
これをすべて行うコードは次のとおりです。
すべてのデータを取得した後、アプリはそれを使用して、指定されたディレクトリから.pngタイルを使用したレベルレイアウトを生成しますが、テスト目的では、上記のように、メニューオプションを使用して00からFFまでの16x16グリッドを生成しています。私はこのメソッドを呼び出します:
これは機能しますが、グリッドをフレームの右半分の左上ではなく、フレーム全体の左上に固定します。左側のフレームで1x256グリッドを実行するための同様のコードがありますが、明らかな理由で、それが同じ問題を抱えているかどうかを判断する方法はありません。どちらにもスクロールバーは機能しますが、スクロールすると再描画の問題が発生するため、アプリケーション全体に画像を描画し、アプリケーションのレイアウトを無視しているのではないかと思います。
ここで見逃したことはありますか?グリッドサイザー、画像、GUI全般をPythonで使用したのはこれが初めてで、VB6よりも少しクロスプラットフォームなもので書きたいと思った後、この言語を始めたばかりです。何か考えはありますか?= /
wxpython - If Possible, How Can One Set Either a Background Color on Cells within a Sizer or Gridlines for the Sizer?
I am flailing about with wxWidgets, in particular, the wx.Sizer in wxPython. I have read the documents, I have a copy of wXPython in Action before me, and have set aside the problem to work on other things a better mental model of sizers hopefully gestated within my skull. None of this has worked.
I am not grokking, or even getting to the point where I can bang about usefully, how sizers work. In HTML, I could at least set a background color on some div
or td
, or call forth border
s so I could see how things are laid out. Here, I have a grey expanse and no idea which of the nested static box sizers from which it originates. I am giving static box sizers after making a mess out of the grid bag sizers.
Either alternative would let me at least get a handle on how these work.
wxpython - ジョブに適切な wx.Sizer は?
特定の要素 (ここでは A、B、D、および G で表されます) をそれぞれ独自のデザインの「コーナー」に配置したいスペースがあります。角は、あたかも 4 つの要素のそれぞれが互いに反発し合っているかのように整列する必要があります。長方形。これは、サイズ変更できないパネル内に含まれます。似たようなパネルをいくつか用意し、要素の位置をできるだけ同じに保ちたいと考えています。(wx.Wizard よりも少し複雑なものが必要でしたが、基本的な考え方は同じです。)
A は大きなフォントのテキストを表します。
B は、小さなフォントで数字の進行状況メーター (「1 of 7」など) を表します。
C は、大きなテキスト ブロックを表します。
D、E、F、および G はボタンです。
G ボタンは、機能のために他のボタンから分離されています。
私は入れ子wx.BoxSizers
(1 つの垂直ボックス内の水平ボックス) を試みましたが、うまくいきませんでした。私の最初の問題wx.BoxSizer
は、.SetMinSize
私の最後の行が尊重されていないことです。2 番目の問題は、G ボタンをコミカルに大きくせずに「スペースを取る」方法や、右端と下端に押し付ける方法がわからないことです。
を使用しようとしましたwx.GridBagSizer
が、まったく別の問題に遭遇しました。
さまざまなオンライン チュートリアルとwxPython in Actionを熟読した後、私は少しイライラしています。関連するフォーラムでは、2 週間に 1 回活動が見られるようです。「それで遊んで」私はどこにも行きませんでした。敷き詰められていないカーペットのこぶを平らにしようとしているような気がします。
wxpython - wxPython でパネルを .Hide()ing および .Show()ing すると、サイザーがレイアウトを変更するのはなぜですか?
私の前の質問で参照されているように、私は少し魔法使いのような機能を作ろうとしています。サイザーを追加した単一のフレームに落ち着きました。ユーザーに見てもらいたい画面ごとにパネルを作成し、それらをフレームのサイザーに追加してから、1 つのパネルを ing してパネルを切り替え、次のパネル.Hide()
でカスタムを呼び出し.ShowYourself()
ます。明らかに、ユーザーがプロセスを進めても、ボタンを同じ場所に残しておきたいと思います。
2 つのパネルを「戻る」ボタンと「次へ」ボタンで無限ループにリンクさせ、何が起こっているかを確認できるようにしました。最初のパネルは見栄えがします。tom10のコードはそのレベルで機能しました。国境があらゆる方向に飛んでいるという私の最初の派手な試みを避けたからです。そして、2番目のパネルは最小限に縮小されたようです. 最初のパネルに戻ると、ここでも収縮が発生しています。最初のパネルでは問題なく表示されるのに、そこに戻った後では表示されないのはなぜですか? .Fit()
10 ピクセル x 10 ピクセルの灰色の塊が必要ないのに、なぜ呼び出しが必要なのですか? また、必要であれば、.Fit()
一貫性のない結果が得られるのはなぜですか?
この無限ループは、これに関する私の経験を特徴付けているようです。パネルのレイアウトを修正しましたが、切り替えると他のパネルのレイアウトが台無しになることがわかりました。sizer_h.Add(self.panel1, 0)
の代わりにを使用してこの問題を修正したsizer_h.Add(self.panel1, 1, wx.EXPAND)
ところ、レイアウトが再びオフになりました。
これまでのところ、私の「解決策」は、mastersizer.SetMinSize((475, 592))
各パネルのマスターサイザーに a を追加することです (以下のコードでコメントアウトされています)。これは厄介な解決策です。1) 試行錯誤によって機能する数値を見つけなければならなかった (幅が -5 ピクセル、高さが -28 ピクセル)。2) 根本的な問題がまだ発生する理由がわかりません。
正しい、醜くない解決策は何ですか? 一度にすべてのパネルをフレームのサイザーに追加する代わりに、フレームのサイザーからそのパネルを含むパネルを切り替え.Detach()
てから、フレームのサイザー.Add()
に次のパネルを ing する必要がありますか? .JustMakeThisFillThePanel()
オンラインの wxWidgets ドキュメントと wxPython ドキュメントの両方で見逃したメソッドが隠されていますか?
私のメンタルモデルのレイアウトには明らかに何かが欠けています。以下に貼り付けた最小限のコード。
python - 展開する WxPython パネル項目を取得する
次のような単一のアイテムを含む WxPython フレームがあります。
これを含むいくつかのパネルを含むフレームがあり、寸法はサイザーによって決定されます。これを広めてほしいStaticText
。BoxSizer
テキストだけを含む を使用してwx.EXPAND
フラグを設定するとうまくいきますが、サイザーを 1 つの項目だけに使用するのはばかげているように思えます。
もっと簡単な解決策はありますか?
(親フレームのサイザーに直接追加することもできますStaticText
が、私のデザインでは、フレームから直接開始する方が理にかなっています。)
BoxSizer
1つのアイテムで を作成すると、 では機能しないことに気付きましたwx.VERTICAL
:
もちろん、1 つのアイテムでも問題ありませんが、後で縦方向にアイテムを追加し、両方を拡大したい場合はどうすればよいでしょうか (たとえば、ユーザーのウィンドウが拡大されたとき)。
編集:ああ、ボックスサイザーを両方の方法で成長させるには、プロポーションを使用する必要があることがわかりました。(つまり、 の呼び出しで 0 を 1 に置き換えBoxSizer.Add
ます。)