QInputDialog 输入视窗
QInputDialog 是 PyQt6 里的输入视窗元件,使用时会打开一个对话视窗,由用户在视窗中选择项目、输入文字或数字后进行互动,这篇教学会介绍如何在 PyQt6 视窗里加入 QInputDialog 输入视窗并进行基本互动应用。
快速导览:
因为 Google Colab 不支援 PyQt6,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 QInputDialog 输入视窗
建立 PyQt6 视窗对象后,先透过 QtWidgets.QPushButton(widget) 方法加入按钮,使用 clicked.connect() 绑定点击按钮时的函数,点击按钮时使用 QtWidgets.QInputDialog() 方法,就能建立输入视窗,下方的程序码会建立最基本文字输入的视窗。
from PyQt6 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())
class 写法 ( 注意不能使用 show 作为方法名称,会覆写基底的 show 方法造成无法显示 ):
from PyQt6 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.btn = QtWidgets.QPushButton(self)
self.btn.setGeometry(10,10,100,30)
self.btn.setText('輸入')
self.btn.clicked.connect(self.showText)
def showText(self):
text, ok = QtWidgets.QInputDialog().getText(Form, '', '請輸入一段文字')
print(text, ok)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
文字输入视窗
当 QInputDialog 输入视窗使用 getText() 方法,表示类型为“文字输入视窗”,程序码用法如下:
text, ok = QtWidgets.QInputDialog().getText(Form, '視窗標題', '說明文字')
# text 輸入的文字
# ok 狀態是否完成
下方的程序码执行后,点击按钮会弹出文字输入视窗,输入文字后,会透过 QLabel 显示输入的文字。
from PyQt6 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())
class 写法:
from PyQt6 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;')
self.btn = QtWidgets.QPushButton(self)
self.btn.setGeometry(10,10,100,30)
self.btn.setText('輸入')
self.btn.clicked.connect(self.showText)
def showText(self):
text, ok = QtWidgets.QInputDialog().getText(Form, '', '請輸入一段文字')
self.label.setText(text)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
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 PyQt6 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())
class 写法:
from PyQt6 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;')
self.btn1 = QtWidgets.QPushButton(self)
self.btn1.setGeometry(10,10,100,30)
self.btn1.setText('整數')
self.btn1.clicked.connect(self.showInt)
self.btn2 = QtWidgets.QPushButton(self)
self.btn2.setGeometry(110,10,100,30)
self.btn2.setText('浮點數')
self.btn2.clicked.connect(self.showDouble)
def showInt(self):
num, ok = QtWidgets.QInputDialog().getInt(self, '', '請輸入一個整數')
self.label.setText(str(num))
def showDouble(self):
num, ok = QtWidgets.QInputDialog().getDouble(self, '', '請輸入一個浮點數')
self.label.setText(str(num))
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
Form = MyWidget()
Form.show()
sys.exit(app.exec())
选项选择视窗
当 QInputDialog 输入视窗使用 getItem() 方法,表示类型为“选项输入视窗”,程序码用法如下:
item, ok = QtWidgets.QInputDialog().getInt(Form, '視窗標題', '說明文字', items, index)
# item 選擇的選項
# ok 狀態是否完成
# items 表示選項,使用串列格式
# index 表示預設第幾個選項,第一個為 0
下方的程序码执行后,点击按钮会弹出输入视窗,选择选项后,会透过 QLabel 显示选择的选项
from PyQt6 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 的写法:
from PyQt6 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;')
self.btn = QtWidgets.QPushButton(self)
self.btn.setGeometry(10,10,100,30)
self.btn.setText('開啟選項')
self.btn.clicked.connect(self.showResult)
def showResult(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())
微信扫码关注
抖音扫码关注