
| ■ | PyQt湯けむりウィジェットツアー(第2弾) |
#! /usr/local/bin/python
import sys, os, string, time
from qt import *
from stat import *
class DirViewWidget(QWidget):
def __init__(self, *args):
apply(QWidget.__init__, (self,) + args)
self.setCaption(self.tr("ディレクトリを見る"))
self.resize(400, 200)
hbdir = QHBox(self)
hbdir.setSpacing(5)
labdir = QLabel(hbdir)
labdir.setText(self.tr("ディレクトリ"))
self.txfdir = QLineEdit(hbdir)
self.txfdir.resize(100, 28)
cmddir = QPushButton(hbdir)
cmddir.setText(self.tr("検索"))
self.connect(cmddir, SIGNAL("clicked()"), self.search)
hbdir.setGeometry(10, 40, 350, 30)
self.lstfiles = QListBox(self)
self.connect(self.lstfiles, SIGNAL("selectionChanged()"), self.selected)
self.labfilei = QLabel(self)
self.labfilei.setFont(QFont("fixed", 12, QFont.Normal))
self.lstfiles.setGeometry(10, 80, 160, 110)
self.labfilei.setGeometry(190, 80, 200, 110)
mb = QMenuBar(self)
mb.setGeometry(0, 0, 400, 32)
self.ppf = QPopupMenu(self)
self.ppf.insertTearOffHandle()
self.ppf.insertItem(QString(self.tr("終了")), self.quit, 0)
self.ppf.insertSeparator()
mb.insertItem(QString(self.tr("ファイル")), self.ppf)
def quit(self):
ans = QMessageBox.information(self, self.tr("終わっち"),
self.tr("終了しますか?"), "&OK", "&Cancel", None, 0, 1)
# 4,5,6番目の引数はそれぞれダイアログにつけるボタンのテキストで、
# Noneはボタンなしの意味です。7番目はEnterキーが押されたときの、
# 8番目はEscapeキーが押されたときのアクションを担当するボタンの
# 番号(0,1,2)を指定します。
if ans == 0: self.close()
def search(self):
self.lstfiles.clear()
dir = string.strip(str(self.txfdir.text()))
if not os.path.isdir(dir):
QMessageBox.information(self, self.tr("おおっと"),
self.tr(dir + "はディレクトリではありません。"), "&OK", None, None,
0, 0)
return
files = os.listdir(dir)
for e in files:
self.lstfiles.insertItem(e)
def selected(self):
e = os.path.join(str(self.txfdir.text()),
str(self.lstfiles.currentText()))
s = os.stat(e)
mode = "%04o" % s[ST_MODE]
size = s[ST_SIZE]
t = time.localtime(s[ST_MTIME])
timespec = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(s[ST_MTIME]))
self.labfilei.setText(e + "\n" + "MODE\t" + mode +"\n" +
"SIZE\t" + str(size) + "\n" + "T/S\t" + timespec)
a = QApplication(sys.argv)
a.setDefaultCodec(QTextCodec.codecForName("eucJP"))
a.setFont(QFont("Fixed", 12, QFont.Normal))
w = DirViewWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.
|
実行した例は下の通りです。 私のデスクトップでスナップしたのでウィンドウマネージャがSawfishになっていますが、 前のページと環境は特に違いはないです(PyQt 2.5 + Python 2.1 + Qt 2.3.1)。
どんなツールかというと、ディレクトリ名を入力して、「検索」 を押すと、ディレクトリ内のファイルの一覧がリストに表示されます。 そのどれかをクリックすると、そのファイルの情報が右下に表示されるというものです。
ちょっとメモ(8) - イエスorノーダイアログ
先にも出てきたQMessageBoxによるダイアログですが、
「はい」「いいえ」のような質問をし、
結果を受け取る関数として使うこともできます。
ダイアログにはボタンを3つまでつけることができ、
それらに自由なテキストを表示することができます。
ans = QMessageBox.information(self, self.tr("終わっち"),
self.tr("終了しますか?"), "&OK", "&Cancel", None, 0, 1)
4,5,6番目の引数はそれぞれダイアログにつけるボタンのテキストで、
Noneはボタンなしの意味です。7番目はEnterキーが押されたときの、
8番目はEscapeキーが押されたときのアクションを担当するボタンの
番号(0,1,2)を指定します。
戻り値は、押されたボタンの位置(0,1,2)です。
つまりこの例では、「OK」が押されると零が、「Cancel」が押されると1が返されます。
ちょっとメモ(9) - ほんとのデフォルトのフォント
PyQtを使うとすぐわかりますが、
日本語のフォントがデフォルトではかなりきちゃないです。
そこで、常にフォントを指定しないといけないのですが、
これが結構面倒です。下のようにアプリケーションQApplicationのメソッドsetFont
を使うと、アプリケーションのデフォルトフォントを指定することができるので、
これを使うと便利です。
a.setFont(QFont("Fixed", 16, QFont.Normal))
セクションのサブメニューに戻る
(first uploaded 2000/10/29 last updated 2002/03/21)