QInputDialog是一个标准的对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成,当用户单击OK按钮或回车键后,在父窗口可以收集通过对话框输入的信息。
输入的信息可以是:数字、字符串、列表项。
也可以从Qt Desinger 直接创建对话框窗口。本文为了更好理解继承和类的概念,直接使用代码来创建窗口。
import sysfrom PySide6 import QtCore, QtGui, QtWidgetsclass dlgInput(QtWidgets.QWidget): #这里继承QWidget def __init__(self): super().__init__() #获取主屏幕大小 screen=QtGui.QGuiApplication.primaryScreen().geometry() sw,sh=screen.width(),screen.height() #设置窗口大小,屏幕居中 #self.setFixedSize(400,300) #窗口大小固定不可调 w,h=400,300 self.setGeometry((sw-w)//2,(sh-h)//2,w,h) #窗口大小可调 #创建四个按钮,一个文本框 self.btnint=QtWidgets.QPushButton("获取整数") self.btndouble=QtWidgets.QPushButton("获取实数") self.btntxt=QtWidgets.QPushButton("获取文本") self.btnitem=QtWidgets.QPushButton("获取列表") self.txtbox=QtWidgets.QLineEdit() #创建2个水平布局和1个垂直父布局 layout1=QtWidgets.QHBoxLayout() layout2=QtWidgets.QHBoxLayout() layout3=QtWidgets.QVBoxLayout(self) #指定继承父窗口 #添加组件到布局上 layout1.addWidget(self.txtbox) layout2.addWidget(self.btnint) layout2.addWidget(self.btndouble) layout2.addWidget(self.btntxt) layout2.addWidget(self.btnitem) #管理布局 layout3.addLayout(layout1) layout3.addLayout(layout2) #信号槽 self.btnint.clicked.connect(lambda:self.getdata(self.btnint)) self.btndouble.clicked.connect(lambda:self.getdata(self.btndouble)) self.btntxt.clicked.connect(lambda:self.getdata(self.btntxt)) self.btnitem.clicked.connect(lambda:self.getdata(self.btnitem)) #槽函数 def getdata(self,btn): txt=btn.text() if txt=="获取列表": items=["香蕉","苹果","西瓜","葡萄","荔枝","梨","桃","柚子","柠檬"] item,ok=QtWidgets.QInputDialog.getItem(self,"选择水果","请选择水果",items,0,False) if ok and item: self.txtbox.setText(item) else: if txt=="获取整数": data,ok=QtWidgets.QInputDialog.getInt(self,txt,"请输入:"+txt[-2:]) if txt=="获取实数": data,ok=QtWidgets.QInputDialog.getDouble(self,txt,"请输入:"+txt[-2:]) if txt=="获取文本": data,ok=QtWidgets.QInputDialog.getText(self,txt,"请输入:"+txt[-2:]) if ok: self.txtbox.setText(str(data))if __name__ == '__main__': app=QtWidgets.QApplication(sys.argv) mywin=dlgInput() mywin.setWindowTitle("Dialog Input Window - PySide6") mywin.show() sys.exit(app.exec())
运行界面
说明:使用代码来创建组件和管理布局,一定清楚继承关系,本文layout3是layout1和layout2的parent,所以不能给layout1和layout2指定其他的parent,否则会报错。
留言与评论(共有 0 条评论) “” |