タスク スケジューラのトリガー ウィンドウに似た GUI を開発するように依頼されました。それを行うために最善を尽くしていますが、1 つのフレームに複数のパネルを作成することに行き詰まっています。以下は、私の GUI がどのように見えるかのスナップショットです。 。私を助けてください。
3 に答える
サイザーを使用して、画像上に描画したコントロールの位置をサイザーの位置に配置します。
青 = 垂直。
緑 = 水平。
以下は、wxpython を使用して作成したスケジューラ ウィンドウです。
class SchedulerWindow(wx.Frame):
""" This generates the GUI for Setting Window"""
#------------------------------------------------------------------------------------
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title="Scheduler", style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX, size=(600,500))
panel=wx.Panel(self)
sizer = wx.GridBagSizer(5, 5)
font = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD)
self.field = wx.TextCtrl(panel,pos=(65,20),size=(400,20))
field_lbl=wx.StaticText(panel,-1, label='Name:', pos=(20,20))
field_lbl.SetFont(font)
line = wx.StaticLine(panel,pos=(0,50), size=(600,1))
#sizer.Add(line, pos=(1,30), span=(1, 5),flag=wx.EXPAND|wx.BOTTOM, border=10)
Box=wx.StaticBox(panel,label='Settings',size=(565,200),pos=(15,60))
Box1=wx.StaticBox(panel,label='',size=(430,120),pos=(120,120))
boxsizer = wx.StaticBoxSizer(Box, wx.VERTICAL)
boxsizer.Add(wx.RadioButton(panel,label="One time",pos=(25,90)),flag=wx.LEFT|wx.TOP, border=5)
boxsizer.Add(wx.RadioButton(panel,label="Daily",pos=(25,110)),flag=wx.LEFT|wx.TOP, border=5)
boxsizer.Add(wx.RadioButton(panel,label="Weekly",pos=(25,130)),flag=wx.LEFT|wx.TOP, border=5)
boxsizer.Add(wx.RadioButton(panel,label="Monthly",pos=(25,150)),flag=wx.LEFT|wx.TOP, border=5)
sizer.Add(boxsizer,pos=(5,10) ,span=(1, 5),
flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT , border=10)
wx.StaticLine(panel, pos=(100,90), size=(1,100))
start=wx.StaticText(panel, -1, 'Start Date:', pos=(120,90))
Time=wx.StaticText(panel, -1, 'Start Time:', pos=(350, 90))
start.SetFont(font)
Time.SetFont(font)
Box2=wx.StaticBox(panel,label='Advance Settings',size=(565,200),pos=(15,280))
boxsizer = wx.StaticBoxSizer(Box2, wx.VERTICAL)
boxsizer.Add(wx.CheckBox(panel, -1,'Repeat task every', pos=(20,300),size=(200,25)))
'start time:' textctrl で時刻を表示したいと思います。TimePickerCtrl を使用しようとしましたが、できませんでした。'DateCtrl' と Calenderdialog を使用して、'Start date:' textctrl にカレンダーを表示しました。example.Thanksで良い提案を楽しみにしています
wx.Notebook を使用していない限り、複数のパネルをフレーム内に配置する必要はほとんどありません。おそらくそれがあなたが探しているものです。wx.Notebook は使いやすく、wxPython には他にもたくさんの「ブック」コントロールが含まれています。ここにいくつかのリンクがあります:
- http://wiki.wxpython.org/Simple%20wx.Notebook%20例
- http://www.blog.pythonlibrary.org/2012/07/18/wxpython-how-to-programmatically-change-wx-notebook-pages/
- http://www.blog.pythonlibrary.org/2009/12/03/the-book-controls-of-wxpython-part-1-of-2/
フレームに複数のパネルが本当に必要な場合、それはコントロールとそのレイアウトを整理するためですか? 代わりにサイザーを使用します。サイザーを使用すると、柔軟性が大幅に向上します。これに関する情報は次のとおりです。
- http://wiki.wxpython.org/UsingSizers
- http://zetcode.com/wxpython/layout/
- http://www.blog.pythonlibrary.org/2008/05/18/a-wxpython-sizers-tutorial/
そして、あなたがパネルを切り替える方法を知りたいと思っているのであれば、私はあなたをカバーしています: http://www.blog.pythonlibrary.org/2010/06/16/wxpython-how-to-switch-between -パネル/