昨日の続きです。
pythonでバイトオーダーマーク(BOM)付きのUTF-8ファイルを読むときは、utf-8ではなくutf-8-sigをcodec.open()で指定してやればOK。挙動が不審で悩んだ〜。
QTabWidgetのなかに、レイアウトを作成する。
親Widgetをつくっておいて、そこにレイアウトを入れるところがポイント。
直接レイアウトできれば楽なんだが...。
今のところQTabLayoutというものは無さそう。
# Tab4.py (coding UTF8) # refs.: http://d.hatena.ne.jp/t2y-1979/20100917/1284652234 # http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtabbar.html # # -*- coding: utf-8 -*- import sys, os, codecs from PyQt4.QtCore import * from PyQt4.QtGui import * class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setWindowTitle("Main Window") #self.resize(800, 600) #self.setMinimumSize(800, 600) # Setup Actions ## openFile Action openFile = QAction(QIcon('open.png'), 'Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip('Open File') self.connect(openFile, SIGNAL('triggered()'), self.showOpenDialog) ## saveFile Action saveFile = QAction(QIcon('save.png'), 'Save', self) saveFile.setShortcut('Ctrl+S') saveFile.setStatusTip('Save File') self.connect(saveFile, SIGNAL('triggered()'), self.showSaveDialog) ## Quit Action Quit = QAction(QIcon('quit.png'), 'Quit', self) Quit.setShortcut('Ctrl+Q') Quit.setStatusTip('Quit this program') self.connect(Quit, SIGNAL('triggered()'), self.QuitDialog) # 1.set Menu Bar self.file_menu = self.menuBar().addMenu("&File") ## Add Actions to Menu Bar self.file_menu.addAction(openFile) self.file_menu.addAction(saveFile) self.file_menu.addAction(Quit) # 2.set Tool Bar self.file_tool = self.addToolBar("ToolBar") self.file_tool.addAction(openFile) self.file_tool.addAction(saveFile) self.file_tool.addAction(Quit) # 3.set Status Bar self.status_bar = QStatusBar(self) self.status_bar.showMessage("Ready", 5000) self.setStatusBar(self.status_bar) # Tab Widget Setup self.tab_widget = QTabWidget(self) self.setCentralWidget(self.tab_widget) #QMainWindowのセントラルウィジェットをQTabWidgetとする self.tab_widget.setTabPosition(QTabWidget.South) tab1widget = QWidget() tab2widget = QWidget() tab3widget = QWidget() self.tab_widget.addTab(tab1widget, "Tab 1") self.tab_widget.addTab(tab2widget, "Tab 2") self.tab_widget.addTab(tab3widget, "Tab 3") # 各TabのWidgetにlayout(とりあえず1個目だけ....) hbox1 = QHBoxLayout() hbox1.addWidget(QLabel("test1")) hbox1.addWidget(QLineEdit()) hbox2 = QHBoxLayout() hbox2.addWidget(QLabel("test2")) hbox2.addWidget(QLineEdit()) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addLayout(hbox2) vbox.addStretch(1) tab1widget.setLayout(vbox) def showOpenDialog(self): filename = QFileDialog.getOpenFileName(self, 'Open file', '') from os.path import isfile if isfile(filename): fname = codecs.open(filename,'r','utf-8') #UTF-8のファイルを読み込み data = fname.read() self.tab1.setText(data) ### self.setWindowTitle("Main Window: %s" % os.path.abspath(filename)) def showSaveDialog(self): savename = QFileDialog.getSaveFileName(self, 'Save file', '') fname = codecs.open(savename, 'w', 'utf-8') #UTF-8のファイルに書き込み fname.write(self.tab1.toPlainText()) ### def QuitDialog(self): reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: quit() else: return # QMainWindowを使った表示 def main(): app = QApplication(sys.argv) mainwindow = MainWindow() mainwindow.show() sys.exit(app.exec_()) if __name__ == "__main__": main()