QInputDialog 輸入視窗
QInputDialog 是 PyQt5 裡的輸入視窗元件,使用時會開啟一個對話視窗,由使用者在視窗中選擇項目、輸入文字或數字後進行互動,這篇教學會介紹如何在 PyQt5 視窗裡加入 QInputDialog 輸入視窗並進行基本互動應用。
快速導覽:
- PyQt6 版本參考:PyQt6 教學 - QInputDialog 輸入視窗
- 因為 Google Colab 不支援 PyQt5,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda )。
加入 QInputDialog 輸入視窗
建立 PyQt5 視窗物件後,先透過 QtWidgets.QPushButton(widget)
方法加入按鈕,使用 clicked.connect()
綁定點擊按鈕時的函式,點擊按鈕時使用 QtWidgets.QInputDialog()
方法,就能建立輸入視窗,下方的程式碼會建立最基本文字輸入的視窗。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
text, ok = QtWidgets.QInputDialog().getText(Form, '', '請輸入一段文字')
print(text, ok)
btn = QtWidgets.QPushButton(Form)
btn.setGeometry(10,10,100,30)
btn.setText('輸入')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())
文字輸入視窗
當 QInputDialog 輸入視窗使用 getText()
方法,表示類型為「文字輸入視窗」,程式碼用法如下:
text, ok = QtWidgets.QInputDialog().getText(Form, '視窗標題', '說明文字')
# text 輸入的文字
# ok 狀態是否完成
下方的程式碼執行後,點擊按鈕會彈出文字輸入視窗,輸入文字後,會透過 QLabel 顯示輸入的文字。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
text, ok = QtWidgets.QInputDialog().getText(Form, '', '請輸入一段文字')
label.setText(text)
label = QtWidgets.QLabel(Form)
label.setGeometry(10,50,200,50)
label.setStyleSheet('font-size:30px;')
btn = QtWidgets.QPushButton(Form)
btn.setGeometry(10,10,100,30)
btn.setText('輸入')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())
數字輸入視窗
當 QInputDialog 輸入視窗使用 getInt()
方法,表示類型為「整數輸入視窗」,使用 getDouble()
方法,表示類型為「浮點數輸入視窗」,程式碼用法如下:
num, ok = QtWidgets.QInputDialog().getInt(Form, '視窗標題', '說明文字')
# num 輸入的整數
# ok 狀態是否完成
num, ok = QtWidgets.QInputDialog().getDouble(Form, '視窗標題', '說明文字')
# num 輸入的浮點數
# ok 狀態是否完成
下方的程式碼執行後,點擊按鈕會彈出輸入視窗,輸入數字後,會透過 QLabel 顯示輸入的數字。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def showInt():
num, ok = QtWidgets.QInputDialog().getInt(Form, '', '請輸入一個整數')
label.setText(str(num))
def showDouble():
num, ok = QtWidgets.QInputDialog().getDouble(Form, '', '請輸入一個浮點數')
label.setText(str(num))
label = QtWidgets.QLabel(Form)
label.setGeometry(10,50,200,50)
label.setStyleSheet('font-size:30px;')
btn1 = QtWidgets.QPushButton(Form)
btn1.setGeometry(10,10,100,30)
btn1.setText('整數')
btn1.clicked.connect(showInt)
btn2 = QtWidgets.QPushButton(Form)
btn2.setGeometry(110,10,100,30)
btn2.setText('浮點數')
btn2.clicked.connect(showDouble)
Form.show()
sys.exit(app.exec_())
選項選擇視窗
當 QInputDialog 輸入視窗使用 getItem()
方法,表示類型為「選項輸入視窗」,程式碼用法如下:
item, ok = QtWidgets.QInputDialog().getInt(Form, '視窗標題', '說明文字', items, index)
# item 選擇的選項
# ok 狀態是否完成
# items 表示選項,使用串列格式
# index 表示預設第幾個選項,第一個為 0
下方的程式碼執行後,點擊按鈕會彈出輸入視窗,選擇選項後,會透過 QLabel 顯示選擇的選項
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
items = ['a','b','c','d','e']
item, ok = QtWidgets.QInputDialog().getItem(Form, '', '請選擇一個選項', items, 0)
label.setText(item)
label = QtWidgets.QLabel(Form)
label.setGeometry(10,50,200,50)
label.setStyleSheet('font-size:30px;')
btn = QtWidgets.QPushButton(Form)
btn.setGeometry(10,10,100,30)
btn.setText('開啟選項')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())
改用 class 的寫法
上方的程式碼,亦可改用 class 的寫法表示。
from PyQt5 import QtWidgets
import sys
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('oxxo.studio')
self.resize(300, 200)
self.ui()
def ui(self):
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(10,50,200,50)
self.label.setStyleSheet('font-size:30px;')
btn = QtWidgets.QPushButton(self)
btn.setGeometry(10,10,100,30)
btn.setText('開啟選項')
btn.clicked.connect(self.showMsg)
def showMsg(self):
items = ['a','b','c','d','e']
item, ok = QtWidgets.QInputDialog().getItem(self, '', '請選擇一個選項', items, 0)
self.label.setText(item)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec_())
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~