PySideのボタン
今回はPySideのボタン類を使ってみる
その前に、コードの整理として、uiファイルを読み込む部分と、
uiを構築する部分を、それぞれ別関数にする
def locdUI(self):
# Load ui file
loader = QUiLoader()
ui_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.\\ui\\ui_HelloWindow.ui')
ui_file = QFile(ui_file_path)
ui_file.open(QFile.ReadOnly)
self.ui = loader.load(ui_file, self)
ui_file.close()
def initUI(self):
# Set Window Title
title = self.ui.windowTitle()
self.setWindowTitle(title)
# Set Window Size
w = self.ui.size().width()
h = self.ui.size().height()
self.resize(w, h)
# Set Menu Bar
teapotAction = self.ui.findChild(QAction, 'actionTeaPot')
teapotAction.triggered.connect(self.makeTeapot)
createMenu = self.ui.findChild(QMenu, 'menuCreate')
createMenu.addAction(teapotAction)
menu = self.ui.findChild(QMenuBar, 'menubar')
menu.addMenu(createMenu)
self.setMenuBar(menu)
# Set Status Bar
# Instance Variable
self.statusbar = self.ui.findChild(QStatusBar, 'statusbar')
self.setStatusBar(self.statusba)
# 以下略
まず、以下の様にQt Designerでボタンを配置する
ボタン類は左のBottunsのみ使用する
PushButton
# PushButton
p_btn = self.ui.findChild(QPushButton, 'pushButton')
p_btn.clicked.connect(self.makeTeapot)
def makeTeapot(self):
with pymxs.undo(True, 'Create TeaPot'):
rt.teapot()
rt.redrawViews()
ToolButton
# ToolButton
t_btn = self.ui.findChild(QToolButton, 'toolButton')
icon_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.\\icons\\teapot.png')
icon = QIcon()
icon.addPixmap(QPixmap(icon_path), QIcon.Normal, QIcon.Off)
t_btn.setIcon(icon)
t_btn.clicked.connect(self.clickedTool)
def clickedTool(self):
# Open File Dialog
file_dialog = QFileDialog()
open_file = file_dialog.getOpenFileName(self)
ToolButtonでList形式のボタンを作成できる
Qt DesignerでToolButtonのcheckableをONにする
# Button List
tl_btn = self.ui.findChild(QToolButton, 'toolButton_2')
btn_menu_list = QMenu(tl_btn)
# Action
ts_act = QAction("Hoge", self)
ts_act.setCheckable(True)
btn_menu_list.addAction(ts_act)
hoge_act = QAction("Piyo", self)
hoge_act.setCheckable(True)
btn_menu_list.addAction(hoge_act)
tl_btn.setMenu(btn_menu_list)
# Action Group
group_action = QActionGroup(self)
group_action.addAction(ts_act)
group_action.addAction(hoge_act)
group_action.triggered.connect(self.selectMenu)
def selectMenu(self):
group: QActionGroup = self.sender()
action = group.checkedAction()
# Get button
tl_btn = self.findChild(QToolButton, 'toolButton_2')
# Set Action text to Button text
tl_btn.setText(action.text())
menu = tl_btn.menu()
menu.setActiveAction(action)
ToolButtonにはメニューが追加できるので、QMenuとQAction,QActionGroupを作成して、ToolButtonに登録する。
これで、メニューみたいなボタンが作成できる。
RadioButton
# Create ButtonGroup
self.radioGroup = QButtonGroup()
# RadioButton
ra_btn = self.ui.findChild(QRadioButton, 'radioButton')
rb_btn = self.ui.findChild(QRadioButton, 'radioButton_2')
# Add RadioButton to ButtonGroup
self.radioGroup.addButton(ra_btn)
self.radioGroup.addButton(rb_btn)
self.radioGroup.buttonClicked.connect(self.clickedRadio)
def clickedRadio(self):
# Get checked button
sel_btn = self.radioGroup.checkedButton()
self.showMessage(sel_btn.text())
CheckBox
# CheckBox
c_box = self.ui.findChild(QCheckBox, 'checkBox')
c_box.stateChanged.connect(self.checkedBox)
def checkedBox(self):
c_box = self.findChild(QCheckBox, 'checkBox')
if c_box.checkState() == Qt.Checked:
self.showMessage("Check Box ON")
else:
self.showMessage("Check Box OFF")
CommandLinkButton
# CommandLinkButton
cl_btn = self.ui.findChild(QCommandLinkButton, 'commandLinkButton')
cl_btn.clicked.connect(self.clickLink)
def clickLink(self):
cl_btn = self.findChild(QCommandLinkButton, 'commandLinkButton')
if cl_btn.isChecked() == True:
self.showMessage("Linked Button Checked")
else:
self.showMessage("Linked Button Unchecked")
DialogButtonBox
# DialogButtonBox
db_box = self.ui.findChild(QDialogButtonBox, 'buttonBox')
db_box.clicked.connect(self.clickButtonBox)
def clickButtonBox(self, btn):
db_btn = self.findChild(QDialogButtonBox, 'buttonBox')
status = db_btn.standardButton(btn)
if status == QDialogButtonBox.StandardButton.Ok:
self.showMessage("Button Box OK")
elif status == QDialogButtonBox.StandardButton.Cancel:
self.showMessage("Button Box Cancel")
まだ、基本的な使い方だけで、どう使うかはまだよく分からない
とりあえずは、PushButton, RadioButton, CheckBoxぐらいでいいかと思う
今後、何か分かったら更新していく
この記事が気に入ったらサポートをしてみませんか?