私はwxPythonに基づいて最初のシンプルだが実際のアプリケーションを作成しようとしています。そして私はwxPythonのホームサイトの基本的なチュートリアルでは書かれていない多くの奇妙なことに直面しています。 ここになぜ単純なwxPythonアプリケーションが最初に壊れて見えるのですか?
ここは最初のものです。 フレーム上で何らかのコントロールのレイアウトを作成し、アプリケーションの開始直後にレイアウトが破損していることを確認しました。しかし、直ぐにアプリケーションのウィンドウのサイズを変更した後は、私が設計したようになりました...ほぼ それでは、wxGladeを使ってコードを生成しましたが、同じ問題が発生しました。 は、ここで私はそれが良くなるリサイズ後http://screencast.com/t/COmqye7dlwzA
あなたが見ることができるように直面した問題の詳細を提供することができ、ビデオが、それでもそれはパネル「panel_3」
の左上CONERでいくつかの奇妙な要素を持っています================================#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade 0.6.5 (standalone edition) on Wed Feb 29 14:03:09 2012
import wx
# begin wxGlade: extracode
# end wxGlade
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.panel_2 = wx.Panel(self, -1)
self.text_ctrl_3 = wx.TextCtrl(self.panel_2, -1, "")
self.text_ctrl_3_copy = wx.TextCtrl(self.panel_2, -1, "")
self.text_ctrl_3_copy_1 = wx.TextCtrl(self.panel_2, -1, "")
self.button_2 = wx.Button(self.panel_2, -1, "button_2")
self.panel_3 = wx.Panel(self.panel_2, -1)
self.__set_properties()
self.__do_layout()
# end wxGlade
def __set_properties(self):
# begin wxGlade: MyFrame.__set_properties
self.SetTitle("frame_1")
self.SetSize((519, 333))
self.text_ctrl_3.SetMinSize((50, -1))
self.text_ctrl_3_copy.SetMinSize((50, -1))
self.text_ctrl_3_copy_1.SetMinSize((50, -1))
self.panel_3.SetBackgroundColour(wx.Colour(255, 255, 255))
# end wxGlade
def __do_layout(self):
# begin wxGlade: MyFrame.__do_layout
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
main_sizer_0 = wx.BoxSizer(wx.HORIZONTAL)
vsizer_left_1 = wx.BoxSizer(wx.VERTICAL)
hsizer_params_2 = wx.BoxSizer(wx.HORIZONTAL)
hsizer_params_2.Add(self.text_ctrl_3, 0, wx.LEFT | wx.RIGHT | wx.TOP, 5)
hsizer_params_2.Add(self.text_ctrl_3_copy, 0, wx.LEFT | wx.RIGHT | wx.TOP, 5)
hsizer_params_2.Add(self.text_ctrl_3_copy_1, 0, wx.LEFT | wx.RIGHT | wx.TOP, 5)
vsizer_left_1.Add(hsizer_params_2, 0, wx.EXPAND, 0)
vsizer_left_1.Add(self.button_2, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5)
main_sizer_0.Add(vsizer_left_1, 0, wx.EXPAND, 0)
main_sizer_0.Add(self.panel_3, 1, wx.ALL | wx.EXPAND, 5)
self.panel_2.SetSizer(main_sizer_0)
sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
# end wxGlade
# end of class MyFrame
if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
:
そして、ここではwxGladeによって生成されたコードです
更新
は、だから私は出て見つけたもの:
- ウィジェット検査ツールはpanel_3が親としてpanel_2していることを示しました。私はそれが正しいと思う。
__do_layoutメソッドで 'self.Layout()'の直前に 'sizer_1.Layout()'を置くと、すべてが修正されます。そして、パネルの左上には奇妙なことはありません_3。私はそれが最初のTextControlに残っている印だと思う。
もう1つ興味深いのは、私が 'self.Layout()'を取り除くことができるということです。
また、__do_layoutメソッド 'self.panel_2.Fit()'または 'self.panel_2.Layout()'の最後に入れてみました。どちらの場合もアプリケーションはまだよく見ていました
私はFit()について読んだことがあり、それはLayout()と同様のthigをしていることが分かりました。私が間違っている ?そしてそれらの違いは何ですか?どの方法が良いですか?そして、なぜアプリケーションを正しく見せるためにフレームのトップエレメントをレイアウトする必要があり、Frame.Layout()はその仕事をしませんか?
私はPython2.7( '2.7(r27:82525、2010年7月4日、07:43:08)[MSC v.1500 64ビット(AMD64)]')とwxPython 2.8.12.1を使用しています。ちょっと後に私はアドバイスしたものを試してみるでしょう。結果を提供します... –
私の質問に更新を入れました –