#! /usr/local/bin/python
import sys
from qt import *
class MyWidget(QWidget):
def __slider_moved(self, val):
self.spia.setValue(val)
self.lcda.display(val)
def __init__(self, *args):
apply(QWidget.__init__, (self,) + args)
self.resize(320, 320)
self.setCaption(self.tr("ゆけむりん"))
# タブウィジェットだよ
tab = QTabWidget(self)
tab.resize(310, 280)
cmda = QPushButton(self.tr("終了"), self)
cmda.setFont(QFont("Helvetica", 16, QFont.Normal))
cmda.setGeometry(240, 290, 60, 24)
self.connect(cmda, SIGNAL("clicked()"), self.close)
# *** PAGE 1 ***
# タブページだよ
page1 = QWidget(tab)
page1.resize(300, 280)
tab.addTab(page1, "Page 1")
# グループボックスだよ
grba = QGroupBox("Group Box 1", page1)
grba.setGeometry(5, 5, 290, 240)
# ボタングループだよ
btga = QButtonGroup("Button Group 1", grba)
btga.setGeometry(5, 20, 120, 100)
# ラジオボタンだよ
self.rads = {"1" : QRadioButton("C1", btga),
"2" : QRadioButton("C2", btga),
"3" : QRadioButton("C3", btga)}
self.rads["1"].move(10, 20); self.rads["1"].setChecked(1)
self.rads["2"].move(10, 40)
self.rads["3"].move(10, 60)
# チェックボタンだよ
self.chka = QCheckBox("Checked?", grba)
self.chka.setGeometry(205, 215, 80, 20)
# ラベルだよ
laba = QLabel(self.tr("むむむ"), grba)
laba.setFont(QFont("Helvetica", 16, QFont.Normal))
laba.move(130, 20)
# ラインエディットだよ
self.txfa = QLineEdit(grba); self.txfa.setText("(default)")
self.txfa.setGeometry(130, 50, 60, 20)
# スライダーだよ
self.slda = QSlider(0, 100, 5, 50, QSlider.Horizontal, grba)
self.slda.setGeometry(130, 80, 80, 20)
# 日本語で言うと説明が長いやつだよ
self.lcda = QLCDNumber(3, grba)
self.lcda.setGeometry(130, 110, 80, 20)
# スピンボックスだよ
self.spia = QSpinBox(grba); self.spia.setRange(0, 100)
self.spia.setValue(50)
self.spia.setGeometry(130, 140, 80, 20)
self.connect(self.slda, SIGNAL("sliderMoved(int)"), self.__slider_moved)
# リストボックスだよ
self.lsta = QListBox(grba)
self.lsta.setGeometry(5, 130, 110, 105)
for e in ["item 1", "item 2", "item 3", "item 4"]:
self.lsta.insertItem(e)
self.lsta.setCurrentItem(0)
# コンボボックスだよ
self.cboa = QComboBox(1, grba)
self.cboa.setGeometry(130, 170, 80, 24)
for e in ["item 1", "item 2", "item 3", "item 4"]:
self.cboa.insertItem(e)
self.cboa.setCurrentItem(3)
# *** PAGE 2 ***
page2 = QWidget(tab)
tab.addTab(page2, "Page 2")
# マルチラインエディットだよ
self.mlea = QMultiLineEdit(page2)
self.mlea.setFont(QFont("fixed", 14, QFont.Normal))
self.mlea.setGeometry(5, 20, 240, 80)
self.mlea.setText(self.tr(
"""これはPyQtでサポートされているウィジェット(GUI部品)のうち、
基本的なものの大部分を一堂に紹介する簡単なサンプルです。
"""))
# ツールチップだよ
QToolTip.add(self.mlea, "Help strings")
# プログレスバーだよ
self.pbar = QProgressBar(page2)
self.pbar.setTotalSteps(100)
self.pbar.setGeometry(5, 110, 180, 30)
# タイマーだよ
self.timer = QTimer()
self.connect(self.timer, SIGNAL("timeout()"), self.__timer_timeout)
# トグルボタンだよ
self.cmdt = QPushButton(self.tr("開始"), page2)
self.cmdt.setFont(QFont("Helvetica", 16, QFont.Normal))
self.connect(self.cmdt, SIGNAL("stateChanged(int)"), self.__timer_trigger)
self.cmdt.setToggleButton(1)
self.cmdt.setGeometry(205, 160, 70, 28)
def __timer_trigger(self, state):
if state == 2: # 押された
self.cmdt.setText(self.tr("ふがふが"))
# プログレスバーをリセット
self.pbarpct = 0
self.pbar.setProgress(0)
# タイマーを開始
# 1番目の引数はタイムアウトまでの時間(ミリ秒)、
# 2番目の引数がTRUE(1)なら一度だけ、FALSE(0)ならstop()メソッドが
# 呼ばれるまで何度でもタイムアウトイベントを発生させます。
self.timer.start(500, 0)
elif state == 0: # 離された
# タイマーを停止、プログレスバーはその位置で停止
self.cmdt.setText(self.tr("開始"))
self.timer.stop()
def __timer_timeout(self):
self.pbarpct += 5
self.pbar.setProgress(self.pbarpct)
# 最大ステップ数(進度100%)に到達したらタイマーを停止
if self.pbarpct >= self.pbar.totalSteps():
self.cmdt.toggle()
def keyPressEvent(self, e):
print str(e.key()) + " " + str(e.ascii()) # + " " + str(e.text())
a = QApplication(sys.argv)
codec = QTextCodec.codecForName("eucJP")
a.setDefaultCodec(codec)
w = MyWidget()
a.setMainWidget(w)
w.show()
a.exec_loop()
# end.
|