精华内容
下载资源
问答
  • 本文基于python3 进行实践… 首先执行以下命令 pip3 install PyQt5-tools pip3 install pyside2 ...然后点击加号,开始设置第一个PyQt5 Designer图形界面设计 Name: QtDesigner Program: 你的p...

    本文基于python3 进行实践…

    首先执行以下命令

    pip3 install PyQt5-tools
    
    pip3 install pyside2
    

    都安装成功后,打开pycharm编辑器, 打开设置 => tools => external tools
    在这里插入图片描述
    在这里插入图片描述
    然后点击加号,开始设置第一个PyQt5 Designer图形界面设计

    Name: QtDesigner
    Program: 你的python环境目录\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe
    Working directory: $FileDir$
    

    然后点击Ok即可…
    在这里插入图片描述
    在这里插入图片描述
    右键项目…点击打开即可,然后可以设计一点简单的ui,保存在项目中,比如testwindow.ui文件

    现在第二步来了,要把这个ui文件转成python代码
    再次点击加号

    Name: PySide2-uic
    Program: 你的python环境目录\Scripts\pyside2-uic.exe
    Arguments: $FileName$ -o $FileNameWithoutExtension$.py
    Working directory: $ProjectFileDir$
    

    在这里插入图片描述
    然后右击项目中的那个ui文件,选择external tools,然后点击PySide2-uic,之后稍等几秒就可以转好了

    展开全文
  • 小编准备用PySide+QtDesiger开发个网络爬虫的界面,可是之前对Qt的界面布局不熟悉,经过几天的研究,也算小做成...一、通过QtDesiger设置界面这个直接打开QtDesiger就可以了,拖拽控件,保存之后生成了一个main.ui文件

    小编准备用PySide+QtDesiger开发个网络爬虫的界面,可是之前对Qt的界面布局不熟悉,经过几天的研究,也算小做成了一个,希望对读者有所帮助。

    一、通过QtDesiger设置界面

    这个直接打开QtDesiger就可以了,拖拽控件,保存之后生成了一个main.ui文件

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>1920</width>
        <height>1440</height>
       </rect>
      </property>
      <property name="minimumSize">
       <size>
        <width>1920</width>
        <height>1440</height>
       </size>
      </property>
      <property name="maximumSize">
       <size>
        <width>1920</width>
        <height>1440</height>
       </size>
      </property>
      <property name="windowTitle">
       <string>新浪微博爬虫系统</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <widget class="QTabWidget" name="tabWidget">
        <property name="geometry">
         <rect>
          <x>40</x>
          <y>40</y>
          <width>1841</width>
          <height>1361</height>
         </rect>
        </property>
        <property name="minimumSize">
         <size>
          <width>1200</width>
          <height>795</height>
         </size>
        </property>
        <property name="maximumSize">
         <size>
          <width>1920</width>
          <height>1440</height>
         </size>
        </property>
        <property name="font">
         <font>
          <pointsize>12</pointsize>
         </font>
        </property>
        <property name="toolTip">
         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;数据分析&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
        </property>
        <property name="currentIndex">
         <number>0</number>
        </property>
        <widget class="QWidget" name="data_grap">
         <property name="whatsThis">
          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;数据爬取&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
         </property>
         <attribute name="title">
          <string>数据爬取</string>
         </attribute>
         <widget class="QWidget" name="">
          <property name="geometry">
           <rect>
            <x>50</x>
            <y>20</y>
            <width>1751</width>
            <height>1271</height>
           </rect>
          </property>
          <layout class="QVBoxLayout" name="verticalLayout">
           <item>
            <layout class="QHBoxLayout" name="horizontalLayout">
             <item>
              <widget class="QLabel" name="keyLabel">
               <property name="text">
                <string>关键字</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QLineEdit" name="keyEdit"/>
             </item>
             <item>
              <widget class="QPushButton" name="startBtn">
               <property name="text">
                <string>开始</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QPushButton" name="stopBtn">
               <property name="text">
                <string>停止</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QPushButton" name="refreshBtn">
               <property name="text">
                <string>刷新</string>
               </property>
              </widget>
             </item>
            </layout>
           </item>
           <item>
            <layout class="QHBoxLayout" name="horizontalLayout_2">
             <item>
              <widget class="QLabel" name="label">
               <property name="text">
                <string>爬取进度</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QProgressBar" name="progressBar">
               <property name="value">
                <number>24</number>
               </property>
              </widget>
             </item>
            </layout>
           </item>
           <item>
            <widget class="QTableView" name="sinaTable">
             <attribute name="verticalHeaderShowSortIndicator" stdset="0">
              <bool>true</bool>
             </attribute>
            </widget>
           </item>
          </layout>
         </widget>
         <zorder>keyLabel</zorder>
         <zorder>keyEdit</zorder>
         <zorder>startBtn</zorder>
         <zorder>stopBtn</zorder>
         <zorder>label</zorder>
         <zorder>progressBar</zorder>
         <zorder></zorder>
         <zorder>tableView</zorder>
         <zorder>sinaTable</zorder>
        </widget>
        <widget class="QWidget" name="data_analysis">
         <property name="whatsThis">
          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;数据分析&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
         </property>
         <attribute name="title">
          <string>数据分析</string>
         </attribute>
        </widget>
       </widget>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>

    二、把ui文件转化为.py文件

    然后控制台到该文件文件的目录下。
    c:/code/python>pyside-uic main.ui -o ui_main.py
    就生成了main.py文件
    如下

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'main.ui'
    #
    # Created: Tue May 02 16:16:03 2017
    #      by: pyside-uic 0.2.15 running on PySide 1.2.4
    #
    # WARNING! All changes made in this file will be lost!
    
    from PySide import QtCore, QtGui
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(1920, 1440)
            MainWindow.setMinimumSize(QtCore.QSize(1920, 1440))
            MainWindow.setMaximumSize(QtCore.QSize(1920, 1440))
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.tabWidget = QtGui.QTabWidget(self.centralwidget)
            self.tabWidget.setGeometry(QtCore.QRect(40, 40, 1841, 1361))
            self.tabWidget.setMinimumSize(QtCore.QSize(1200, 795))
            self.tabWidget.setMaximumSize(QtCore.QSize(1920, 1440))
            font = QtGui.QFont()
            font.setPointSize(12)
            self.tabWidget.setFont(font)
            self.tabWidget.setObjectName("tabWidget")
            self.data_grap = QtGui.QWidget()
            self.data_grap.setObjectName("data_grap")
            self.widget = QtGui.QWidget(self.data_grap)
            self.widget.setGeometry(QtCore.QRect(50, 20, 1751, 1271))
            self.widget.setObjectName("widget")
            self.verticalLayout = QtGui.QVBoxLayout(self.widget)
            self.verticalLayout.setContentsMargins(0, 0, 0, 0)
            self.verticalLayout.setObjectName("verticalLayout")
            self.horizontalLayout = QtGui.QHBoxLayout()
            self.horizontalLayout.setObjectName("horizontalLayout")
            self.keyLabel = QtGui.QLabel(self.widget)
            self.keyLabel.setObjectName("keyLabel")
            self.horizontalLayout.addWidget(self.keyLabel)
            self.keyEdit = QtGui.QLineEdit(self.widget)
            self.keyEdit.setObjectName("keyEdit")
            self.horizontalLayout.addWidget(self.keyEdit)
            self.startBtn = QtGui.QPushButton(self.widget)
            self.startBtn.setObjectName("startBtn")
            self.horizontalLayout.addWidget(self.startBtn)
            self.stopBtn = QtGui.QPushButton(self.widget)
            self.stopBtn.setObjectName("stopBtn")
            self.horizontalLayout.addWidget(self.stopBtn)
            self.refreshBtn = QtGui.QPushButton(self.widget)
            self.refreshBtn.setObjectName("refreshBtn")
            self.horizontalLayout.addWidget(self.refreshBtn)
            self.verticalLayout.addLayout(self.horizontalLayout)
            self.horizontalLayout_2 = QtGui.QHBoxLayout()
            self.horizontalLayout_2.setObjectName("horizontalLayout_2")
            self.label = QtGui.QLabel(self.widget)
            self.label.setObjectName("label")
            self.horizontalLayout_2.addWidget(self.label)
            self.progressBar = QtGui.QProgressBar(self.widget)
            self.progressBar.setProperty("value", 0)
            self.progressBar.setObjectName("grapProgress")
            self.horizontalLayout_2.addWidget(self.progressBar)
            self.verticalLayout.addLayout(self.horizontalLayout_2)
            self.sinaTable = QtGui.QTableView(self.widget)
            self.sinaTable.setObjectName("sinaTable")
            self.sinaTable.verticalHeader().setSortIndicatorShown(True)
            self.verticalLayout.addWidget(self.sinaTable)
            self.tabWidget.addTab(self.data_grap, "")
            self.data_analysis = QtGui.QWidget()
            self.data_analysis.setObjectName("data_analysis")
            self.tabWidget.addTab(self.data_analysis, "")
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            self.tabWidget.setCurrentIndex(0)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "新浪微博爬虫系统", None, QtGui.QApplication.UnicodeUTF8))
            self.tabWidget.setToolTip(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>数据分析</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
            self.data_grap.setWhatsThis(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>数据爬取</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
            self.keyLabel.setText(QtGui.QApplication.translate("MainWindow", "关键字", None, QtGui.QApplication.UnicodeUTF8))
            self.startBtn.setText(QtGui.QApplication.translate("MainWindow", "开始", None, QtGui.QApplication.UnicodeUTF8))
            self.stopBtn.setText(QtGui.QApplication.translate("MainWindow", "停止", None, QtGui.QApplication.UnicodeUTF8))
            self.refreshBtn.setText(QtGui.QApplication.translate("MainWindow", "刷新", None, QtGui.QApplication.UnicodeUTF8))
            self.label.setText(QtGui.QApplication.translate("MainWindow", "爬取进度", None, QtGui.QApplication.UnicodeUTF8))
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.data_grap), QtGui.QApplication.translate("MainWindow", "数据爬取", None, QtGui.QApplication.UnicodeUTF8))
            self.data_analysis.setWhatsThis(QtGui.QApplication.translate("MainWindow", "<html><head/><body><p>数据分析</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.data_analysis), QtGui.QApplication.translate("MainWindow", "数据分析", None, QtGui.QApplication.UnicodeUTF8))
    

    三、为该界面绑定类

    该文件要和上个ui_main.py文件放在同一个目录下

    #!usr/bin/env python
    #coding:utf-8
    #这就是界面文件
    import ui_main
    import sys
    from PySide.QtGui import QMainWindow,QApplication
    from PySide.QtCore import Qt
    
    
    class MainWindow(QMainWindow,ui_main.Ui_MainWindow):
        def __init__(self, parent=None):
            super(MainWindow,self).__init__(parent)
            self.setupUi(self)
            self.sinaTable.setGridStyle(Qt.PenStyle.SolidLine)
            self.sinaTable.setColumnWidth(0,200)
            self.sinaTable.setColumnWidth(2,300)
            self.sinaTable.setColumnWidth(1,200)
            self.sinaTable.setColumnWidth(3,1000)
    
            self.startBtn.clicked.connect(self.__startBtn_Click)
            self.refreshBtn.clicked.connect(self.__refreshBtn_Click)
        def __startBtn_Click(self,row):
            #开始按钮
            pass
        def __refreshBtn_Click(self):
            #刷新数据
            pass

    三、调用该界面

    到现在基本差不多了,就是调用这个类了,

    import sys
    #导入上面的类
    import main
    from PySide.QtGui import QApplication
    
    if __name__ == '__main__':
        program = QApplication(sys.argv)
        app= main.MainWindow()
        app.show()
        program.exec_()

    这样就完成了一个界面的开发,希望给读者一定帮助!

    展开全文
  • Python从入门到实战 第十一章 图形用于界面第十一章 讲解主要内容11.1 初识图形用户界面11.2 tkinter开发包11.3 tkinter模块下基本组件11.4 ttk子模块下组件11.5 tix子模块下组件11.6 scrolledtext子模块下组件11.7 ...
  • Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...

    参考:https://www.jb51.net/article/167015.htm
    前言
    Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。

    开发工具版本
    pyhton3.7.4 + PyQt 5.11.2

    Qt Designer工具主界面
    打开路径:${python安装目录}/Lib/site-packages/pyqt5_tools/designer.exe。主界面如下:
    在这里插入图片描述
    主界面不同区域介绍:

    工具箱 区域:提供Gui界面开发各种基本控件,如单选框、文本框等。可以拖动到新创建的主程序界面。

    主界面 区域:用户放置各种从工具箱拖过来的各种控件。模板选项中最常用的就是Widget(通用窗口)和MainWindow(主窗口)。二者区别主要是Widget窗口不包含菜单栏、工具栏等。可以分别创建对比看看。

    对象查看器 区域:查看主窗口放置的对象列表。

    属性编辑器 区域: 提供对窗口、控件、布局的属性编辑功能。比如修改控件的显示文本、对象名、大小等。

    信号/槽编辑器 区域:编辑控件的信号和槽函数,也可以添加自定义的信号和槽函数。

    Qt Designer基本控件介绍
    Widget Box控件工具箱是按照控件作用类别进行划分的。这里作为实现入门级界面实现,主要介绍最常使用的控件及控件对象相关函数。函数方法知道怎么获取控件输入内容以及如何将后台操作结果输出到界面控件显示的主要函数就可以了。
    在这里插入图片描述
    (1)显示控件。
    Lable:文本标签,显示文本,可以用来标记控件。
    Text Browser:显示文本控件。用于后台命令执行结果显示。

    (2)输入控件,提供与用户输入交互
    Line Edit:单行文本框,输入单行字符串。控件对象常用函数为Text() 返回文本框内容,用于获取输入。setText() 用于设置文本框显示。
    Text Edit:多行文本框,输入多行字符串。控件 对象常用函数同Line Edit控件。
    Combo Box:下拉框列表。用于输入指定枚举值。

    (3)控件按钮,供用户选择与执行
    Push Button:命令按钮。常见的确认、取消、关闭等按钮就是这个控件。clicked信号一定要记住。clicked信号就是指鼠标左键按下然后释放时会发送信号,从而触发相应操作。
    Radio Button:单选框按钮。
    Check Box:多选框按钮。
    在这里插入图片描述
    Qt Designer工具实现
    了解基本控件及作用和获取输入/显示方法后,就可以开始动手实现小需求了。。比如登录界面。获取用户名和密码并显示。。

    打开Qt Designer,开始拖拽控件实现吧。。
    Step1:打开主界面,选择Widget模板
    在这里插入图片描述
    Step2:从Widget Box工具箱中拖拽2个label、2个line Edit、2个Push Button以及1个Text Browser。拖完后如下:
    在这里插入图片描述
    Step3:双击各个控件,修改控件名称(对应属性编辑区中的text,可直接双击控件修改)以及对象名称(对应属性编辑区中的objectName)。对象名称一定记得修改。默认生成的label_1、label_2这种名称无法直接判断到底是对应哪个控件。。
    在这里插入图片描述
    点击菜单栏Form - Prview。预览界面实现效果
    在这里插入图片描述
    login.ui的程序代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>Form</class>
     <widget class="QWidget" name="Form">
     <property name="geometry">
     <rect>
     <x>0</x>
     <y>0</y>
     <width>549</width>
     <height>199</height>
     </rect>
     </property>
     <property name="windowTitle">
     <string>用户登录</string>
     </property>
     <widget class="QLabel" name="user_label">
     <property name="geometry">
     <rect>
     <x>50</x>
     <y>40</y>
     <width>61</width>
     <height>21</height>
     </rect>
     </property>
     <property name="text">
     <string>用户名</string>
     </property>
     </widget>
     <widget class="QLineEdit" name="user_lineEdit">
     <property name="geometry">
     <rect>
     <x>130</x>
     <y>40</y>
     <width>113</width>
     <height>20</height>
     </rect>
     </property>
     </widget>
     <widget class="QLabel" name="pwd_label">
     <property name="geometry">
     <rect>
     <x>50</x>
     <y>80</y>
     <width>54</width>
     <height>12</height>
     </rect>
     </property>
     <property name="text">
     <string>密码</string>
     </property>
     </widget>
     <widget class="QLineEdit" name="pwd_lineEdit">
     <property name="geometry">
     <rect>
     <x>130</x>
     <y>70</y>
     <width>113</width>
     <height>20</height>
     </rect>
     </property>
     </widget>
     <widget class="QPushButton" name="login_Button">
     <property name="geometry">
     <rect>
     <x>50</x>
     <y>110</y>
     <width>75</width>
     <height>23</height>
     </rect>
     </property>
     <property name="text">
     <string>登录</string>
     </property>
     </widget>
     <widget class="QPushButton" name="cancel_Button">
     <property name="geometry">
     <rect>
     <x>160</x>
     <y>110</y>
     <width>75</width>
     <height>23</height>
     </rect>
     </property>
     <property name="text">
     <string>退出</string>
     </property>
     </widget>
     <widget class="QTextBrowser" name="user_textBrowser">
     <property name="geometry">
     <rect>
     <x>270</x>
     <y>30</y>
     <width>221</width>
     <height>101</height>
     </rect>
     </property>
     </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    

    Step4:点击File -Save保存实现结果。保存文件名为login.ui。
    在这里插入图片描述
    Step5:界面开发完成。

    将.ui文件转换为.py文件
    使用命令行pyuic5 -o login.py login.ui转换成.py文件。调用格式为pyuic5 -o {输出文件名} {输入designer设计好的.ui后缀界面文件}。执行结果如下
    在这里插入图片描述
    转换后的.py文件内容如下:

    # -*- coding: utf-8 -*-
    # Form implementation generated from reading ui file 'login.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
    from PyQt5 import QtCore, QtGui, QtWidgets
    class Ui_Form(object):
     def setupUi(self, Form):
     Form.setObjectName("Form")
     Form.resize(549, 199)
     self.user_label = QtWidgets.QLabel(Form)
     self.user_label.setGeometry(QtCore.QRect(50, 40, 61, 21))
     self.user_label.setObjectName("user_label")
     self.user_lineEdit = QtWidgets.QLineEdit(Form)
     self.user_lineEdit.setGeometry(QtCore.QRect(130, 40, 113, 20))
     self.user_lineEdit.setObjectName("user_lineEdit")
     self.pwd_label = QtWidgets.QLabel(Form)
     self.pwd_label.setGeometry(QtCore.QRect(50, 80, 54, 12))
     self.pwd_label.setObjectName("pwd_label")
     self.pwd_lineEdit = QtWidgets.QLineEdit(Form)
     self.pwd_lineEdit.setGeometry(QtCore.QRect(130, 70, 113, 20))
     self.pwd_lineEdit.setObjectName("pwd_lineEdit")
     self.login_Button = QtWidgets.QPushButton(Form)
     self.login_Button.setGeometry(QtCore.QRect(50, 110, 75, 23))
     self.login_Button.setObjectName("login_Button")
     self.cancel_Button = QtWidgets.QPushButton(Form)
     self.cancel_Button.setGeometry(QtCore.QRect(160, 110, 75, 23))
     self.cancel_Button.setObjectName("cancel_Button")
     self.user_textBrowser = QtWidgets.QTextBrowser(Form)
     self.user_textBrowser.setGeometry(QtCore.QRect(270, 30, 221, 101))
     self.user_textBrowser.setObjectName("user_textBrowser")
    
     self.retranslateUi(Form)
     QtCore.QMetaObject.connectSlotsByName(Form)
    
     def retranslateUi(self, Form):
     _translate = QtCore.QCoreApplication.translate
     Form.setWindowTitle(_translate("Form", "用户登录"))
     self.user_label.setText(_translate("Form", "用户名"))
     self.pwd_label.setText(_translate("Form", "密码"))
     self.login_Button.setText(_translate("Form", "登录"))
     self.cancel_Button.setText(_translate("Form", "退出"))
    

    界面与业务逻辑分离实现
    这一步主要实现业务逻辑,也就是点击登录和退出按钮后程序要执行的操作。为了后续维护方便,采用界面与业务逻辑相分离来实现。也就是通过创建主程序调用界面文件方式实现。这有2个好处。第1就是实现逻辑清晰。第2就是后续如果界面或者逻辑需要变更,好维护。新建call_login.py文件程序,调用login.py文件。

    # -*- coding: utf-8 -*-
    # Form implementation generated from reading ui file 'connect_me.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
    #导入程序运行必须模块
    import sys
    #PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
    from PyQt5.QtWidgets import QApplication, QMainWindow
    #导入designer工具生成的login模块
    from login import Ui_Form
    
    class MyMainForm(QMainWindow, Ui_Form):
     def __init__(self, parent=None):
     super(MyMainForm, self).__init__(parent)
     self.setupUi(self)
    if __name__ == "__main__":
     #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
     app = QApplication(sys.argv)
     #初始化
     myWin = MyMainForm()
     #将窗口控件显示在屏幕上
     myWin.show()
     #程序运行,sys.exit方法确保程序完整退出。
     sys.exit(app.exec_())
    

    运行call_login.py程序,结果如下:
    在这里插入图片描述
    到这里,界面实现和业务主程序已经写好了。但是现在具体业务功能逻辑还未实现。需要对登录和退出的按钮点击执行相对应的操作。

    添加信号和槽,实现业务逻辑
    实现部分见代码注释。这里主要添加如下两行命令配置信号和槽的关系。信号和槽的创建和原理下文描述。这里可以参照添加即可。

    登录按钮:self.login_Button.clicked.connect(self.display)

    退出按钮:self.cancel_Button.clicked.connect(self.close)

    详细代码如下:

    # -*- coding: utf-8 -*-
    # Form implementation generated from reading ui file 'connect_me.ui'
    #
    # Created by: PyQt5 UI code generator 5.11.3
    #
    # WARNING! All changes made in this file will be lost!
    #导入程序运行必须模块
    import sys
    #PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
    from PyQt5.QtWidgets import QApplication, QMainWindow
    #导入designer工具生成的login模块
    from login import Ui_Form
    class MyMainForm(QMainWindow, Ui_Form):
     def __init__(self, parent=None):
     super(MyMainForm, self).__init__(parent)
     self.setupUi(self)
     #添加登录按钮信号和槽。注意display函数不加小括号()
     self.login_Button.clicked.connect(self.display)
     #添加退出按钮信号和槽。调用close函数
     self.cancel_Button.clicked.connect(self.close)
     def display(self):
     #利用line Edit控件对象text()函数获取界面输入
     username = self.user_lineEdit.text()
     password = self.pwd_lineEdit.text()
     #利用text Browser控件对象setText()函数设置界面显示
     self.user_textBrowser.setText("登录成功!\n" + "用户名是: "+ username+ ",密码是: "+ password)
    
    if __name__ == "__main__":
     #固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
     app = QApplication(sys.argv)
     #初始化
     myWin = MyMainForm()
     #将窗口控件显示在屏幕上
     myWin.show()
     #程序运行,sys.exit方法确保程序完整退出。
     sys.exit(app.exec_())
    

    运行结果如下:
    在这里插入图片描述
    用户登录小程序开发完成。但是这个界面还有一个小问题,就是拖动的时候,界面会变形。。看图
    在这里插入图片描述
    是不是觉得不可忍受。。有两个办法,一种是界面点击使用网格布局,一种是使界面大小不可改变。这里介绍第二种方法。在Qt Designer上修改主界面最大属性中的长宽设置成与最小属性一致。如下:
    在这里插入图片描述
    这样设置之后,就不允许在窗口左右两边拖动导致界面改变大小,就可以保证主界面中的控件不会变形。

    Pyinstaller打包成.exe文件
    用户登录显示程序界面和逻辑都实现了。下来就是要推广使用了。不是所有人电脑上都安装有python软件或者对应的python版本以及PyQt5工具。那么如何让程序在这些未安装python软件的机子上运行呢?可以使用pyinstaller工具将程序打包成.exe文件。pyinstaller使用方法可以参考《使用Pyinstaller转换.py文件为.exe可执行程序》。打包过程如下:

    pyinstaller.exe -F call_login.py -w
    

    在这里插入图片描述
    打包成功后call_login.exe在当前目录的dist目录下。执行call_login.exe,程序可以正确运行。如下:
    在这里插入图片描述

    这样,其他人想运行你的程序,就可以直接给他提供call_login.exe可执行过程序了。

    小结
    本文主要讲述了使用Qt Designer工具实现一个用户登录显示的小需求。通过这个需求可以知道如何使用Qt Designer实现界面开发、.ui文件转换、业务和界面分离实现以及最简单的信号和槽创建。通过这个需求实现过程描述相信你可以参考动手实现你的小需求。起码可以上手实践了。。

    实际上这个程序还有很多小问题。。因为用户登录界面控件少,所以没有感觉出来。。就是控件布局管理。就是如何让界面上的控件整齐有序、布局合理美观。

    展开全文
  • Python-PyQt5-文件拖拽重命名图形界面开发安装PyQt5Qt Designer界面设计动态加载UI文件文件拖拽重命名实现发布程序 图形界面开发 Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PyQt5可以让我们...

    图形界面开发

    Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PyQt5可以让我们通过Python语言使用Qt。

    安装PyQt5

    直接执行

    pip install pyqt5-tools
    

    可同时安装 PyQt5 和 一些重要的工具,比如 Qt designer。

    Qt Designer界面设计

    Windows下,运行 Python安装目录下 Scripts\pyqt5designer.exe。

    QT程序界面的 一个个窗口、控件,我们用QT界面生成器 Qt Designer ,拖拖拽拽就可以直观的创建出程序大体的界面。

    通过 Qt Designer 设计的界面,最终是保存在一个ui文件中的。大家可以打开这个ui文件看看,就是一个XML格式的界面定义。

    利用Qt Designer 实现文件拖拽重命名工具。
    界面如下:
    在这里插入图片描述
    在Qt Designer中设置stylesheet

    QWidget{
    	border: 1px solid rgb(50, 50, 50);
    	background: rgb(50, 50, 50);
    }
    QLineEdit{
    	color:Gray;
    	border: 1px solid DarkGray;
    	box-shadow: 1px 1px 3px rgba(0,0,0,0.3);
    	border-radius: 10px;
    	font-family: 微软雅黑;
    	background:transparent;
    	border-radius: 4px;
    	height: 25px;
    	border: 1px solid rgb(100, 100, 100);
    	background: rgb(72, 72, 73);
    }
    QTextEdit{
    	background-repeat:no-repeat;
    	background-position:center;
    	background-origin:border;
    	background-image:url(images/form.jpeg);
    }
    QLabel{
    	border-radius: 15px;
    	color: white;
    	font-size:16px;
    	backgroundrgb:(175, 175, 175);
    	text-align:center;
    }
    QCheckBox{
    	border-radius: 15px;
    	color: white;
    	font-size:16px;
    	backgroundrgb:(175, 175, 175);
    	text-align:center;
    }
    

    动态加载UI文件

    from PyQt5 import uic
    
    class Stats:
        def __init__(self):
            # 从文件中加载UI定义
            self.ui = uic.loadUi("main.ui")
    
    app = QApplication([])
    stats = Stats()
    stats.ui.show()
    app.exec_()
    

    文件拖拽重命名实现

    from PyQt5.QtWidgets import QApplication
    from PyQt5 import uic
    from PyQt5.QtGui import QIcon
    import os
    
    class Stats:
    
        def __init__(self):
            # 从文件中加载UI定义
            self.ui = uic.loadUi("ui/main.ui")
            #设置窗最口大小为固定值
            self.ui.setMinimumSize(500,500)
            self.ui.setMaximumSize(500,500)
            #设置窗口名称
            self.ui.setWindowTitle('Rename')
            #发生了text改变事件,需要让editchange来处理
            self.ui.textEdit.textChanged.connect(self.editchange)
    
        def New_name(self):
            name = ""
            lineEdits = [self.ui.lineEdit_1,self.ui.lineEdit_2,self.ui.lineEdit_3,
                         self.ui.lineEdit_4,self.ui.lineEdit_5]
            for lineEdit in lineEdits:
                name = name + lineEdit.text()
            if self.ui.checkBox.isChecked():
                name = name + self.ui.lineEdit_6.text()
            return name
    
        def editchange(self):
            try:
                if 0 == self.ui.textEdit.toPlainText().find('file:///'):
                    #获取源文件路径
                    src_name = self.ui.textEdit.toPlainText().replace('file:///', '')
                    (filepath, tempfilename) = os.path.split(src_name)
                    (filename, extension) = os.path.splitext(tempfilename)
                    dst_name = filepath + '/' + self.New_name() + extension
                    os.rename(src_name, dst_name)
                self.ui.textEdit.clear()
            except:
                pass
    
    app = QApplication([])
    app.setWindowIcon(QIcon('images/form.jpeg'))
    stats = Stats()
    stats.ui.show()
    app.exec_()
    

    运行结果:
    在这里插入图片描述
    填写相应内容,将文件拖入程序界面中图片位置,就可将文件进行重命名,同时可选择是否勾选备注,来确定其是否加入文件名。

    发布程序

    pyinstaller -F -w -i img.ico rename.py
    

    pyinstaller -F -c -i img.ico rename.py
    

    (建议先用-c,这样如果打包不成功的话可以看到哪里有错)

    -F 指只生成一个exe文件,不生成其他dll文件
    -w 不弹出命令行窗口
    -c 生成的exe文件打开方式为控制台打开。
    -i 设定程序图标 ,其后面的ico文件就是程序图标

    rename.py 就是要打包的程序

    展开全文
  • 文章目录Qt Designer 简介界面的创建界面的加载使用...因此出现了 QT 界面生成器 Qt Designer,直接通过拖拽就可以直观的创建出程序大体的界面。 windows 打开位置: 运行在Python安装目录下 Lib\site-packages\PyS...
  • Python界面生成器wxFormBuilder简单使用入门教程

    万次阅读 多人点赞 2018-11-06 17:50:34
    python的桌面UI设计和处理,使用wxPython + wxFromBuilder是一个相对简单的方案。 1.下载 用pip install wxpython下载最新的wxPython。 2.下载wxfrombuilder wxFormBuilder下载链接,这个是直接用来拖拽用的。 ...
  • 看了pyqt5,只会把界面拖拽出来,怎么和代码实现链接不懂。除了pyqt5还有其他的方法么? 在此首先谢过路过的各位😃</p>
  • Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具...
  • pyqt是第三方gui开发工具,是目前公认的python上最好的客户端界面开发工具,因为控件是通过qt设计师的手动拖拽,调整颜色 字体 大小等样式也很简单,不需要去代码层面来写大量界面代码,真正的所见即所得。...
  • python使用pyqt写带界面工具

    千次阅读 2017-07-06 10:02:44
    上篇介绍的使用python自带tkinter包,来写带界面的工具。...pyqt是第三方gui开发工具,是目前公认的python上最好的客户端界面开发工具,因为控件是通过qt设计师的手动拖拽,调整颜色 字体 大小等样式也
  • 基于上期的内容:Python GUI初学者计划2——手写代码的方式实现PySide2界面设计(详细讲解内部联系),我们大致说了下直接用代码创建UI界面,以及详述了信号signal和槽slot之间的联系。 手动写代码虽然可以让我们...
  • PYQT5界面设计

    2020-08-21 11:10:47
    pyqt5界面设计学习 设备:pycharm+python3.6+pyqt5 1,进入qt designer 在pycharm的终端输入后回车: pyqt5designer 2,新建一个Widget窗口 窗口尺寸可以自己任意选择,也可以默认,选择完之后会自动弹出窗口; 3...
  • Python

    2019-03-26 14:20:59
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; ...
  • 界面设计器分析

    2012-03-31 22:44:58
    最近要做一个Python的基于Eclipse的界面设计器,因此我对各种GUI设计工具做了一下分析,发现GUI设计工具也有一个门派。  在那个懵懂的年代,一切界面代码都是要开发人员手工书写,这无疑增加了开发难度,Delphi、...
  • python 环境

    2019-04-26 14:58:10
    一,初识python python 最初是雅虎那帮子人写...全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将...
  • python处理excel

    2020-10-30 08:58:34
    python处理excel ...全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑
  • Python GUI开发包——wxpython

    千次阅读 2018-10-23 15:44:18
    主要的原因是 Python 并没有提供方便的可拖拽界面设计工具。当然这也可能是我认识上的不足,如果有好的基于 Python 的界面开发工具恳请留言推荐给我。 个人在网上查找,发现很多人基于 wxpyth...
  • 菜鸟Python记录

    2021-04-19 20:28:45
    #2021.4.19 Python入门一 #for in 循环 for item in ...全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可
  • python随笔

    2020-12-16 00:39:17
    欢迎进入我的爬虫世界 你好! 这是你第一次使用 Markdown...全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能
  • python基础汇总

    2019-02-15 19:39:01
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域...
  • 第一个Python程序

    千次阅读 热门讨论 2021-01-26 01:16:28
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的...
  • Python 数据分析基础

    2020-08-07 18:14:12
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的...
  • python gui pyqt4

    2012-05-02 15:26:41
    pyqt4是python的一个gui工具,简单强大,做运维的朋友可以用来设计一些小工具...界面设计很好弄,拖拖拽拽就行了。 我设计的一个升级用的小程序: 推荐学习博客:http://yjphhw.i.sohu.com/blog/view/198552401....
  • Tello 无人机 python 编程

    千次阅读 2020-06-29 09:05:38
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  • python常用语法总结

    2021-04-18 10:08:58
    全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示; 全新的...
  • Python集合学习五

    2021-01-10 16:52:08
    @Python集合学习 Python集合定义 ...全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
关键字:

python拖拽界面设计

python 订阅