[Python GUI PyQt4 vs WxPython]
Python으로 GUI Application을 만드는데에는 몇 가지 선택지가 있다.
Mobile이면 Kivy도 좋은 선택지라고 생각한다.
Kivy는 터치가 가능한 어플리케이션을 만들기 좋고 멀티터치도 가능하다.
반면, Desktop Application을 만들거라면 PyQt4와 WxPython으로 좁혀진다.
둘 다 멋진 라이브러리이고, 만들고자하는 것의 대부분을 만족 시킬 수 있을 것이다.
나는 PyQt4를 먼저 사용해보고 WxPython으로 넘어간 케이스이다.
PyQt 이하 Qt를 사용하며 느낀점은, UI Component를 배치하는 방식이 쉽다. 복잡하고 정교하게도 가능하다.
self.layout = QtGui.QGridLayout()self.label_currentDB = QtGui.QLabel("Current Database : ")self.label_currentDB.setFixedWidth(130)self.label_newDB = QtGui.QLabel("New Database : ")self.label_newDB.setFixedWidth(130)self.Edit_currentDB = QtGui.QLineEdit()self.Edit_currentDB.setFixedWidth(130)self.Edit_currentDB.setText(ChangeDB.currentDB)self.Edit_newDB = QtGui.QLineEdit()self.Edit_newDB.setFixedWidth(130)self.button_change = QtGui.QPushButton("Change")self.button_change.clicked.connect(self.changeDB)self.Edit_newDB.returnPressed.connect(self.changeDB)self.button_cancel = QtGui.QPushButton("Cancel")self.button_cancel.clicked.connect(self.close)self.myQMenuBar = QtGui.QMenuBar(self)self.layout.addWidget(self.label_currentDB, 0, 0, 1, 1)self.layout.addWidget(self.label_newDB, 1, 0, 1, 1)self.layout.addWidget(self.Edit_currentDB, 0, 1, 1, 1)self.layout.addWidget(self.Edit_newDB, 1, 1, 1, 1)self.layout.addWidget(self.button_change, 4, 0, 1, 1)self.layout.addWidget(self.button_cancel, 4, 1, 1, 1)self.setLayout(self.layout)Wx는 느낌이 아래와 같이 Boxsizer라는 것을 사용해서 배치를 한다.Qt도 레이아웃이라는 개념을 사용해서 레이아웃 안에 레이아웃과 같이 배치를 정교하게 할 수 있다.vbox = wx.BoxSizer(wx.VERTICAL)box = wx.StaticBox(panel, -1, 'Change DB')bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)nmbox = wx.BoxSizer(wx.HORIZONTAL)fn = wx.StaticText(panel, -1, "Input IP :")nmbox.Add(fn, 0, wx.ALL | wx.CENTER, 5)self.nm1 = wx.TextCtrl(panel, -1, style=wx.ALIGN_LEFT)nmbox.Add(self.nm1, 0, wx.ALL | wx.CENTER, 5)bsizer.Add(nmbox, 0, wx.ALL | wx.CENTER, 10)hbox = wx.BoxSizer(wx.HORIZONTAL)okButton = wx.Button(panel, -1, 'Change')hbox.Add(okButton, 0, wx.ALL | wx.LEFT, 10)cancelButton = wx.Button(panel, -1, 'Cancel')hbox.Add(cancelButton, 0, wx.ALL | wx.LEFT, 10)vbox.Add(bsizer, 0, wx.ALL | wx.CENTER, 5)vbox.Add(hbox, 0, wx.ALL | wx.CENTER, 5)panel.SetSizer(vbox)self.Centre()panel.Fit()self.Show()okButton.Bind(wx.EVT_BUTTON, self.OnOk)cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)사용해본 바로는 내가 구현하고 싶은 방법으로 구현하는 데에는 Wx가 낫다고 평가하고 싶다.Staticbox와 같은 컴포넌트나, 몇 가지 세부적인 UI 컴포넌트가 좀더 있었다.그리고 dialog창에서 OK를 눌렀을 때 parent에서 어떻게 동작하는지 정하기도 그렇고,Wx를 좀 더 깊게 파서 그런지 몰라도 나는 Wx가 더 풍부하게 활용 가능하다고 생각한다.처음에 Qt를 사용할지 Wx를 사용할지 고민 많이하다가 둘다 사용해 본 바로는 Wx에 손을 들어주고 싶다.
'Computer Science > Python' 카테고리의 다른 글
[Tensorflow] 텐서플로우 자료형 (0) | 2017.06.03 |
---|---|
[Python] Virtualenv 가상환경 구성하기 (0) | 2017.05.31 |
[Docker] 윈도우 10에 Docker 설치 후 Tensorflow 환경 만들기(1) (0) | 2017.05.28 |
[Django] Error: Import by filename is not supported (0) | 2017.05.25 |
[Python Windows Services] 파이썬 윈도우 서비스 만들기 - 서비스가 시작이나 제어 요청에 빠르게 응답하지 않았습니다. (0) | 2017.05.17 |