🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3737閲覧

wxPythonでBoxSizerが思うように動作しない

VangaroooYamada

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/09/16 14:14

前提・実現したいこと

wxPython を用いて GUI を作ろうとしています.
メインパネルの上部にメニュー用のパネルを用意し,そこにボタンを並べようと思っています.

発生している問題・エラーメッセージ

BoxSizer を用いてメニューパネルにボタンを横に並べようとしているのですが,
2つ以上配置してもボタンが1つしか現れません.(同じ場所に重なっているっぽい)
BoxSizer に Add していけば勝手に横に並んでくれると認識しているのですが,間違っているのでしょうか.
実行結果

該当のソースコード

python

1import wx 2 3SCR_WIDTH, SCR_HEIGHT = 500, 400 4SCR_size = SCR_WIDTH, SCR_HEIGHT 5MB_size = 32, 32 6 7 8class MenuPanel(wx.Panel): 9 def __init__(self, parent, *args, **kw): 10 super().__init__(parent, *args, **kw) 11 self.set_buttons() 12 13 def set_buttons(self): 14 config_btn = wx.BitmapButton(self, wx.ID_ANY, 15 wx.Bitmap('./images/config.png'), 16 size=MB_size, style=0) 17 clear_btn = wx.BitmapButton(self, wx.ID_ANY, 18 wx.Bitmap('./images/clear.png'), 19 size=MB_size, style=0) 20 21 self.layout = wx.BoxSizer(wx.HORIZONTAL) 22 self.layout.Add(config_btn, flag=wx.GROW, border=0) 23 self.layout.Add(clear_btn, flag=wx.GROW, border=0) 24 25 self.SetSizer(self.layout) 26 27 28class MainPanel(wx.Panel): 29 def __init__(self, parent, *args, **kw): 30 super().__init__(parent, wx.ID_ANY, *args, **kw) 31 32 33class MyApp(wx.Frame): 34 35 def __init__(self, *args, **kw): 36 super(MyApp, self).__init__(*args, **kw) 37 self.init_ui() 38 39 def init_ui(self): 40 self.SetTitle('GUITest') 41 self.SetSize(SCR_size) 42 self.SetTransparent(128) 43 44 menu_panel = MenuPanel(self, pos=(0, 0), size=(SCR_WIDTH, 32)) 45 menu_panel.SetBackgroundColour('GRAY') 46 47 main_panel = MainPanel(self, pos=(0, 32), 48 size=(SCR_WIDTH, SCR_HEIGHT - 32)) 49 main_panel.SetBackgroundColour('RED') 50 51 52if __name__ == '__main__': 53 app = wx.App() 54 55 frame = MyApp(None, wx.ID_ANY) 56 57 frame.Center() 58 frame.Show() 59 60 app.MainLoop() 61

試したこと

BitMapButton でボタンを作成する際に, pos でボタンを重ならないように位置指定するとボタンがちゃんと表示されました.
ただいちいち pos を指定するのも面倒なので Add するだけで横に並んでもらいたいです.

補足情報(FW/ツールのバージョンなど)

Python 3.7.2
wxPython 4.0.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

BoxSizer に Add していけば勝手に横に並んでくれると認識しているのですが,間違っているのでしょうか.

質問のコードですとLinuxだとその通りに配置されるようですがWindowsだとなぜかだめですね。

いろいろ試した結果、menu_panelとmain_panelもBoxSizerに入れてあげるとWindowsでもボタンが並ぶようになりました。

Python

1 def init_ui(self): 2 self.SetTitle('GUITest') 3 self.SetSize(SCR_size) 4 self.SetTransparent(128) 5 6 self.VBox = wx.BoxSizer(wx.VERTICAL) 7 8 menu_panel = MenuPanel(self, size=(SCR_WIDTH, 32)) 9 menu_panel.SetBackgroundColour('GRAY') 10 11 main_panel = MainPanel(self, 12 size=(SCR_WIDTH, SCR_HEIGHT - 32)) 13 main_panel.SetBackgroundColour('RED') 14 15 self.VBox.Add(menu_panel) 16 self.VBox.Add(main_panel) 17 self.SetSizer(self.VBox) 18

投稿2019/09/27 23:00

nomuken

総合スコア1627

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

VangaroooYamada

2019/09/30 09:20

なるほど,Windows上での問題なのですね… 解決策まで提示していただき,ありがとうございます. 手元の環境で試してみたところ,意図通りに動作しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問