领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

137.Python——PySide6:QInputDialog输入对话框的创建与使用

nixiaole 2025-01-02 18:14:19 知识剖析 18 ℃

QInputDialog是一个标准的对话框,由一个文本框和两个按钮(OK按钮和Cancel按钮)组成,当用户单击OK按钮或回车键后,在父窗口可以收集通过对话框输入的信息。

输入的信息可以是:数字、字符串、列表项。

也可以从Qt Desinger 直接创建对话框窗口。本文为了更好理解继承和类的概念,直接使用代码来创建窗口。


运行效果:

完整代码

import sys
from PySide6 import QtCore, QtGui, QtWidgets

class 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,否则会报错。

最近发表
标签列表