HOW-TO: Программа на Python, Часть 6 Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
fullcircle:32:python_ч_6 [2010/06/19 14:14]
fullcircle:32:python_ч_6 [2013/10/09 10:33] (текущий)
[FrameSecond code:] удаление лишнего кода
Строка 1: Строка 1:
-======HOW-TO:​ Программа на Python, Часть ​======+======HOW-TO:​ Программа на Python, Часть ​======
 <style right> <style right>
 //​Автор — Грэг Валтерс (Greg Walters)// //​Автор — Грэг Валтерс (Greg Walters)//
 </​style>​ </​style>​
 +
  
   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]   - [[..:​27:​python_ч_1|Программа на Python — часть 1]]
Строка 13: Строка 14:
   - [[..:​34:​python_ч_8|Программа на Python — часть 8]]   - [[..:​34:​python_ч_8|Программа на Python — часть 8]]
   - [[..:​35:​python_ч_9|Программа на Python — часть 9]]   - [[..:​35:​python_ч_9|Программа на Python — часть 9]]
 +  - [[..:​36:​python_ч_10|Программа на Python — часть 10]]
 +  - [[..:​37:​python_ч_11|Программа на Python — часть 11]]
 +  - [[..:​38:​python_ч_12|Программа на Python — часть 12]]
 +  - [[..:​39:​python_ч_13|Программа на Python — часть 13]]
 +  - [[..:​40:​python_ч_14|Программа на Python — часть 14]]
  
 Думаю, что вы поигрались с Boa Constructor со времени нашей последней встречи. Сначала мы напишем простую программу,​ которая открывает одно окно, а после нажатия кнопки — второе окно. В прошлый раз мы открывали окно сообщений. На этот раз мы откроем отдельное окно. Это будет полезно при создании приложений с несколькими окнами. Итак, приступим... Думаю, что вы поигрались с Boa Constructor со времени нашей последней встречи. Сначала мы напишем простую программу,​ которая открывает одно окно, а после нажатия кнопки — второе окно. В прошлый раз мы открывали окно сообщений. На этот раз мы откроем отдельное окно. Это будет полезно при создании приложений с несколькими окнами. Итак, приступим...
Строка 32: Строка 38:
 {{ :​fullcircle:​32:​screenshot_003.png?​350 }} {{ :​fullcircle:​32:​screenshot_003.png?​350 }}
  
-Теперь настала пора разобраться со второй формой. Откройте «FrameSecond» в режиме дизайнера. Задайте название «FrameSecond» и заголовок «Second Frame». Задайте центровку «wx.BOTH». Добавьте кнопку и выровняйте её в нижней части окна. Задайте название «btnFSExit» и заголовок «Exit». Создайте событие для кнопки. Добавьте элемент управления «wx.StaticText» в верхней части окна ближе к середине. Назовите его «stHiThere»,​ задайте надпись «Hi there...I'​m the second form!», начертание «Sans», размер 14 пт и плотность «wxBOLD». Теперь сбросьте положение,​ чтобы в форме кнопка была выровнена справа и слева. Это можно сделать,​ сняв галочку с атрибута «Position»,​ и изменять положение «X» для сдвига кнопки вправо и влево, и положение «Y» для сдвига кнопки вверх и вниз до тех пор, пока результат не удовлетворит вас. Запишите изменения и сохраните их.+Теперь настала пора разобраться со второй формой. Откройте «FrameSecond» в режиме дизайнера. Задайте название «FrameSecond» и заголовок «Second Frame». Задайте центровку «wx.BOTH». Добавьте кнопку и выровняйте её в нижней части окна. Задайте название «btnFSExit» и заголовок «Exit». Создайте событие для кнопки. Добавьте элемент управления «wx.StaticText» в верхней части окна ближе к середине. Назовите его «stHiThere»,​ задайте надпись «Hi there...I'​m the second form!», начертание «Sans», размер 14 пт и плотность «wxBOLD»(Props->​Font). Теперь сбросьте положение,​ чтобы в форме кнопка была выровнена справа и слева. Это можно сделать,​ сняв галочку с атрибута «Position»,​ и изменять положение «X» для сдвига кнопки вправо и влево, и положение «Y» для сдвига кнопки вверх и вниз до тех пор, пока результат не удовлетворит вас. Запишите изменения и сохраните их.
  
 После того как мы создали формы, мы напишем код, который «склеит» их все. После того как мы создали формы, мы напишем код, который «склеит» их все.
Строка 71: Строка 77:
  
 В следующий раз мы отложим в сторону программирование интерфейсов и рассмотрим программирование баз данных. До следующего раза установите на свою систему python-apsw и python-mysqldb. Для SQLite также понадобятся sqlite и sqlitebrowser. Если вы хотите поэкспериментировать с MySql, это прекрасно. Все пакеты устанавливаются с помощью Synaptic. В следующий раз мы отложим в сторону программирование интерфейсов и рассмотрим программирование баз данных. До следующего раза установите на свою систему python-apsw и python-mysqldb. Для SQLite также понадобятся sqlite и sqlitebrowser. Если вы хотите поэкспериментировать с MySql, это прекрасно. Все пакеты устанавливаются с помощью Synaptic.
 +
 +=====Коды=====
 +
 +====GUI2 code:====
 +
 +<​code>#​!/​usr/​bin/​env python
 +#​Boa:​App:​BoaApp
 +
 +import wx
 +
 +import FrameMain
 +import FrameSecond
 +
 +modules ={u'​FrameMain':​ [1, 'Main frame of Application',​ u'​FrameMain.py'​],​
 + ​u'​FrameSecond':​ [0, '',​ u'​FrameSecond.py'​]}
 +
 +class BoaApp(wx.App):​
 +    def OnInit(self):​
 +        self.main = FrameMain.create(None)
 +        self.main.Show()
 +        self.SetTopWindow(self.main)
 +        return True
 +
 +def main():
 +    application = BoaApp(0)
 +    application.MainLoop()
 +
 +if __name__ == '​__main__':​
 +    main()</​code>​
 +
 +====FrameMain code:====
 +
 +<​code>#​Boa:​Frame:​FrameMain
 +
 +import wx
 +import FrameSecond
 +
 +def create(parent):​
 +    return FrameMain(parent)
 +
 +[wxID_FRAMEMAIN,​ wxID_FRAMEMAINBTNEXIT,​ wxID_FRAMEMAINBTNSHOWNEW, ​
 + ​wxID_FRAMEMAINPANEL1, ​
 +] = [wx.NewId() for _init_ctrls in range(4)]
 +
 +class FrameMain(wx.Frame):​
 +    def _init_ctrls(self,​ prnt):
 +        # generated method, don't edit
 +        wx.Frame.__init__(self,​ id=wxID_FRAMEMAIN,​ name=u'​FrameMain',​
 +              parent=prnt,​ pos=wx.Point(846,​ 177), size=wx.Size(400,​ 340),
 +              style=wx.DEFAULT_FRAME_STYLE,​ title=u'​Main Frame'​)
 +        self.SetClientSize(wx.Size(400,​ 340))
 +        self.Center(wx.BOTH)
 +
 +        self.panel1 = wx.Panel(id=wxID_FRAMEMAINPANEL1,​ name='​panel1',​
 +              parent=self,​ pos=wx.Point(0,​ 0), size=wx.Size(400,​ 340),
 +              style=wx.TAB_TRAVERSAL)
 +
 +        self.btnShowNew = wx.Button(id=wxID_FRAMEMAINBTNSHOWNEW,​
 +              label=u'​Show the other frame',​ name=u'​btnShowNew',​
 +              parent=self.panel1,​ pos=wx.Point(120,​ 103), size=wx.Size(168,​ 29),
 +              style=0)
 +        self.btnShowNew.SetBackgroundColour(wx.Colour(25,​ 175, 23))
 +        self.btnShowNew.Bind(wx.EVT_BUTTON,​ self.OnBtnShowNewButton,​
 +              id=wxID_FRAMEMAINBTNSHOWNEW)
 +FrameMain Code (cont.):
 +        self.btnExit = wx.Button(id=wxID_FRAMEMAINBTNEXIT,​ label=u'​Exit',​
 +              name=u'​btnExit',​ parent=self.panel1,​ pos=wx.Point(162,​ 191),
 +              size=wx.Size(85,​ 29), style=0)
 +        self.btnExit.SetBackgroundColour(wx.Colour(225,​ 218, 91))
 +        self.btnExit.Bind(wx.EVT_BUTTON,​ self.OnBtnExitButton,​
 +              id=wxID_FRAMEMAINBTNEXIT)
 +
 +    def __init__(self,​ parent):
 +        self._init_ctrls(parent)
 +        self.Fs = FrameSecond.FrameSecond(self)
 +
 +    def OnBtnShowNewButton(self,​ event):
 +        #​event.Skip()
 +        self.Fs.Show()
 +        self.Hide()
 +
 +    def OnBtnExitButton(self,​ event):
 +        #​event.Skip()
 +        self.Close()</​code>​
 +
 +====FrameSecond code:====
 +
 +<​code>#​Boa:​Frame:​FrameSecond
 +
 +import wx
 +
 +def create(parent):​
 +    return FrameSecond(parent)
 +
 +[wxID_FRAMESECOND,​ wxID_FRAMESECONDBTNFSEXIT,​ wxID_FRAMESECONDPANEL1, ​
 + ​wxID_FRAMESECONDSTATICTEXT1, ​
 +] = [wx.NewId() for _init_ctrls in range(4)]
 +
 +class FrameSecond(wx.Frame):​
 +    def _init_ctrls(self,​ prnt):
 +        # generated method, don't edit
 +        wx.Frame.__init__(self,​ id=wxID_FRAMESECOND,​ name=u'​FrameSecond',​
 +              parent=prnt,​ pos=wx.Point(849,​ 457), size=wx.Size(419,​ 236),
 +              style=wx.DEFAULT_FRAME_STYLE,​ title=u'​Second Frame'​)
 +        self.SetClientSize(wx.Size(419,​ 236))
 +        self.Center(wx.BOTH)
 +        self.SetBackgroundStyle(wx.BG_STYLE_COLOUR)
 +
 +        self.panel1 = wx.Panel(id=wxID_FRAMESECONDPANEL1,​ name='​panel1',​
 +              parent=self,​ pos=wx.Point(0,​ 0), size=wx.Size(419,​ 236),
 +              style=wx.TAB_TRAVERSAL)
 +
 +        self.btnFSExit = wx.Button(id=wxID_FRAMESECONDBTNFSEXIT,​ label=u'​Exit',​
 +              name=u'​btnFSExit',​ parent=self.panel1,​ pos=wx.Point(174,​ 180),
 +              size=wx.Size(85,​ 29), style=0)
 +        self.btnFSExit.Bind(wx.EVT_BUTTON,​ self.OnBtnFSExitButton,​
 +              id=wxID_FRAMESECONDBTNFSEXIT)
 +
 +        self.staticText1 = wx.StaticText(id=wxID_FRAMESECONDSTATICTEXT1,​
 +              label=u"​Hi there...I'​m the second form!",​ name='​staticText1',​
 +              parent=self.panel1,​ pos=wx.Point(45,​ 49), size=wx.Size(336,​ 23),
 +              style=0)
 +        self.staticText1.SetFont(wx.Font(14,​ wx.SWISS, wx.NORMAL, wx.BOLD,
 +              False, u'​Sans'​))
 +
 +    def __init__(self,​ parent):
 +        self._init_ctrls(parent)
 +        self.parent = parent
 +
 +    def OnBtnFSExitButton(self,​ event):
 +        #​event.Skip()
 +        self.parent.Show()
 +        self.Hide()</​code>​
  
 --------------------------------------- ---------------------------------------