designer_designer qt 输入框 - CSDN
精华内容
参与话题
  • PyQt5(designer)入门教程

    万次阅读 多人点赞 2019-12-11 14:35:44
    PyQt5入门教程 注:这是当时闲着无聊写到github page的,在CSDN上也看了大佬们各种各样的教程跟疑难杂症...Youtube上面倒是有不少视频,但是不少Youtuber居然还在手写ui而不是利用方便快捷的Qt Designer。仅有的几个...

    PyQt5入门教程

    2019/12/11更新:我平时不看CSDN的,之前一时兴起发了过来,没想到反响还不错。这次就顺便把后来新增的一个小节放上来,并且在文末增加了我的GitHub(一看GitHub就知道我是个菜鸡,大家都是互相学习啦~)

    注:这是当时闲着无聊写到github page的,在CSDN上也看了大佬们各种各样的教程跟疑难杂症解答,感觉我这个不放出来也有点可惜,希望各位能够从中收益吧。

    在网上看了不少关于PyQt5的中文教程,但是无外乎是过时了,讲解不清晰易懂,或者资料不完整。Youtube上面倒是有不少视频,但是不少Youtuber居然还在手写ui而不是利用方便快捷的Qt Designer。仅有的几个视频虽然利用了Qt Designer来设计UI,但是他们并没有将UI跟逻辑分离,这种行为并不是我期望的。

    为此,我花费了不少时间在网上寻找各种资料。于是乎,我最终还是下定决心把自己的学习过程给记录下来。记录下来是给我自己复习跟参考的,如果有人能够从中受益,那也挺好,不用浪费时间去到处找答案。

    0x00 安装环境清单

    我使用的环境如下:

    • Windows 10 (Build 17763)
    • Python 3.7.2
    • VSCode 1.33.0
    • PyQt5
    • Qt Designer

    如果你使用的是OSX或者Linux,请自行替换教程中的一些操作。

    本文并不讨论Python和VSCode的安装,如果没有VSCode,你可以用各种同类IDE替代或者安装它。

    本文不讨论多Python共存,毕竟Python2.7在2020年就要退役了,而且我本人也没这需求。

    0x01 安装PyQt5

    下面直接使用pip来安装PyQt5,此处可能是pip/pip3,或者两者皆可,后面不再重复

    直接pip安装PyQt5

    pip install PyQt5
    

    由于Qt Designer已经在Python3.5版本从PyQt5转移到了tools,因此我们还需要安装pyqt5-tools

    pip install pyqt5-tools
    

    到这一步,PyQt5就安装完成了,你可以通过下面若干可选的操作来检查是否已经安装成功:

    • Win+S呼出Cornata主面板(搜索框),输入designer,如果看到跟下图类似的结果说明PyQt Designer已经被安装

    designer_install

    • 在cmd中输入pyuic5,如果返回“Error: one input ui-file must be specified”说明安装成功。

    0x02 初识Qt Designer

    注:Qt Designer的界面是全英文的,幸运的是有汉化方法,不过因为我本人用不上,所以如果有这方面需求可以自行搜索。

    我比较习惯用Win+S呼出Cornata主面板(搜索框)来启动各种应用,那么这里就是在搜索框中输入designer并敲回车,就能够启动Qt Designer了。

    初次启动会弹出这个“New Form”窗口,一般来说选择“Main Window”然后点击“Create”就可以了。下方有个“Show this Dialogue on Startup”的checkbox,如果不想每次启动都看到这个“New Form”窗口,可以取消勾选。

    new_form
    创建“Main Window”之后,我们会看到如下画面

    designer_ui
    下面就来简单介绍下整个画面的构成:

    • 左侧的“Widget Box”就是各种可以自由拖动的组件

    • 中间的“MainWindow - untitled”窗体就是画布

    • 右上方的"Object Inspector"可以查看当前ui的结构

    • 右侧中部的"Property Editor"可以设置当前选中组件的属性

    • 右下方的"Resource Browser"可以添加各种素材,比如图片,背景等等,目前可以不管

    大致了解了每个板块之后,就可以正式开始编写第一个UI了

    0x03 HelloWorld!

    注:从这里开始,相关代码可以在/assets/code/pyqt5中找到

    注:本文用到的代码都在我github,就不在CSDN这里上传了

    通常来说,编写GUI有两种方法:第一种就是直接使用方便快捷的Qt Designer,第二种就是写代码。在有Qt Designer的情况下,是完全不推荐费时费力去手写GUI代码的。Qt Designer可以所见即所得,并且可以方便的修改并做出各种调整。

    按照惯例,我们先来实现一个能够显示HelloWorld的窗口。

    1)添加文本

    在左侧的“Widget Box”栏目中找到“Display Widgets”分类,将“Label”拖拽到屏幕中间的“MainWindow”画布上,你就获得了一个仅用于显示文字的文本框,如下图所示。

    designer_create_label

    2)编辑文本

    双击上图中的“TextLabel”,就可以对文本进行编辑,这里我们将其改成“HelloWorld!”,如下图所示。如果文字没有完全展示出来,可以自行拖拽空间改变尺寸。

    特别提醒,编辑完文本之后记得敲击回车令其生效!

    designer_change_label_text

    3)添加按钮

    使用同样的方法添加一个按钮(PushButton)并将其显示的文本改成“HelloWorld!”,如下图所示。

    designer_create_pushbutton

    4)修改窗口标题

    下面修改窗口标题。选中右上方的"Object Inspector"中的“MainWindow”,然后在右侧中部的"Property Editor"中找到“windowTitle”这个属性,在Value这一栏进行修改,修改完记得敲击回车。

    5)编辑菜单栏

    注意到画布的左上方有个“Type Here”,双击它即可开始编辑菜单栏。菜单栏支持创建多级菜单以及分割线(separator)。我随意创建了一些菜单项目,如下图所示。

    designer_create_menu

    6)预览

    使用快捷键Ctrl+R预览当前编写的GUI(或者从菜单栏的Form > Preview / Preview in进入)

    designer_preview

    7)保存

    如果觉得完成了,那就可以保存成*.ui的文件,这里我们保存为HelloWorld.ui。为了方便演示,我将文件保存到D盘。

    8)生成Python代码

    使用cmd将目录切到D盘并执行下面的命令。请自行将下面命令中的name替换成文件名,比如本例中的“HelloWorld.ui”

    pyuic5 -o name.py name.ui
    

    生成的代码应该类似下图所示

    designer_code_helloworld

    9)运行Python代码

    此时尝试运行刚刚生成的“HelloWorld.py”是没用的,因为生成的文件并没有程序入口。因此我们在同一个目录下另外创建一个程序叫做“main.py”,并输入如下内容。在本例中,gui_file_name就是HelloWorld,请自行替换。

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow
    
    import gui_file_name
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        MainWindow = QMainWindow()
        ui = gui_file_name.Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    

    然后运行“main.py”,你就能看到刚刚编写的GUI了!

    designer_run_helloworld

    10)组件自适应

    如果你刚刚尝试去缩放窗口,会发现组件并不会自适应缩放,因此我们需要回到Qt Designer中进行一些额外的设置。

    点击画布空白处,然后在上方工具栏找到grid layout或者form layout,在本例中我们使用grid layout。两种layout的图标如下图所示。

    designer_layout_helloworld

    顺带一提,上图中layout的左边有三条横线以及三条竖线的图标,这两个是用于对齐组件,非常实用。

    设置grid layout后,我们使用Ctrl+R预览,这次组件可以自适应了!因为我们已经将UI(HelloWorld.py/HelloWorld.ui)跟逻辑(main.py)分离,因此直接重复步骤7-8即可完成UI的更新,无需改动逻辑(main.py)部分。

    0x04 Interaction

    刚刚写的HelloWorld中,我们设置的按钮(PushButton)是没有实际作用的,因为我们并没有告诉这个按钮应该做什么。实际上,要让这个按钮做点什么只需要增加一行代码就可以了。

    1)获取按钮id

    打开HelloWorld.ui,在designer中选中对应的按钮,从“Property Editor”中可以得知这个按钮的“objectName”叫做“pushButton”,如下图所示。

    designer_pushbutton_id

    2)设置触发

    Qt中有“信号和槽(signal and slot)”这个概念,不过目前无需深究,也无需在Designer中去设置对应按钮的“信号和槽”,直接在“main.py”中“MainWindow.show()”的后面加入下面这样的一行代码

    ui.pushButton.clicked.connect(click_success)
    

    下面简单解释下这行代码

    • pushButton就是刚刚获取的按钮id
    • clicked就是信号,因为是点击,所以我们这里用clicked
    • click_success就是对应要调用的槽,注意这里函数并不写成click_success()

    3)设置函数

    既然刚刚设置了按钮的触发并绑定了一个函数click_success,我们就要在“main.py”中实现它。示例如下

    def click_success():
        print("啊哈哈哈我终于成功了!")
    

    4)运行!

    UI跟逻辑分离的好处就在这里,我们这次不用去管“HelloWorld.py”了,直接运行修改完的“main.py”。点击按钮,这次你会发现在控制台中有了我们预设的输出。

    0x05 Conversion

    这次我们来进行实战演练,编写一个带GUI的汇率转换器。

    1)设计UI

    conversion_ui

    通过上面的讲解,你应该能够毫无压力的设计上面这样的UI并获得对应的代码。如果不行,那么不建议继续往下阅读,应当回头复习。

    2)传参

    现在我们有了GUI的代码以及上一节中使用的“main.py”,我们可以开始编写这个汇率转换器的逻辑部分。

    在上一节,我们介绍了如何让按钮响应点击操作,但是并没有接受任何参数,而且只是在控制台输出。但是,上一节中说明了并不能通过正常的方式进行传参。因此,对于传参,有两种解决方案,一种是使用lambda,还有一种是使用functool.partial。在接下来的环节中我们会使用partial。

    partial的用法如下所示:

    partial(function, arg1, arg2, ......)
    

    既然使用partial传参,那么我们就要在程序(main.py)的头部加上下面这行。

    from functools import partial
    

    然后我们把上一节中的按钮触发那行代码修改成下面这样。

    ui.pushButton.clicked.connect(partial(convert, ui))
    

    3)编写convert函数

    首先,我们要获取用户输入的数字。为了使得教程简洁易懂,我们这次只讲解单向的汇率转换。既然是单项的转换,那么我们只需要获取左侧的文本框id。在本例中,左侧的文本框id为lineEdit。如果你对此感到一头雾水,请停下并回头复习。

    获取文本使用的是text()方法,因此读取用户输入的代码如下

    input = ui.lineEdit.text()
    

    接着我们进行汇率转换,注意这里要进行类型转换

    result = float(input) * 6.7
    

    最后我们让右边的文本框显示结果

    ui.lineEdit_2.setText(str(result))
    

    下面是convert函数的代码

    def convert(ui):
        input = ui.lineEdit.text()
        result = float(input) * 6.7
        ui.lineEdit_2.setText(str(result))
    

    一个简单的汇率转换器就这样诞生了!

    那么,如何知道一个组件都有什么方法呢?直接去Qt官方文档查看就可以了。本节使用到的lineEdit的相关方法在这里

    0x06 threading

    1)前言

    这几天在用PyQt5写东西的时候遇到这样一个问题,网上资料也特别少,我感觉值得拿出来说一说。

    我的程序中使用了threading模块,GUI作为主线程去启动负责逻辑处理的子线程。其中,我设计的GUI里头有一个日志框,用来代替终端显示各种日志输出。既然子线程是负责逻辑处理,那么想当然的就会直接在子线程操作GUI的显示。

    都说了想当然,那当然不行咯,在子线程对GUI操作的时候,终端会出现下面这个错误,但是程序又不会马上闪退。

    QObject::connect: Cannot queue arguments of type 'QTextCursor'
    (Make sure 'QTextCursor' is registered using qRegisterMetaType().)
    

    更让人摸不着头脑的是,过一阵子闪退的时候,会出现下面这句话:

    段错误,核心已转储
    

    这啥玩意儿?能说人话么?一番搜索之后,发现这个原来英语叫做“Segmentation fault (core dumped)”。

    "Segmentation fault"用人话来说大概就是“你尝试访问你无法访问的内存”。

    然后我把上面的报错信息搜索了下,发现之前有人在StackOverflow问过,但是答案牛头不对马嘴,不过倒是在评论区发现了大佬的留言。

    It is likely that the asker was not actually directly using QTextCursor, but rather using GUI code from a thread that was not the GUI thread. Attempting this seems to result in this error arising from Qt-internal code, e.g. for QTextEdit.append()
    

    简而言之,就是说虽然报错显示QTextCursor,但是实际上是在其它线程通过Qt内部的方法间接调用了这个东西。

    热心大佬还留了个链接,我跟过去看了,收获不少。

    It appears you're trying to access QtGui classes from a thread other than the main thread. Like in some other GUI toolkits (e.g. Java Swing), that's not allowed.
    
    Although QObject is reentrant, the GUI classes, notably QWidget and all its subclasses, are not reentrant. They can only be used from the main thread.
    

    这个终于说到点子上了,一句话总结就是子线程不能调用主线程的QtGui类。

    所以大佬给出的方案如下:

    A solution is to use signals and slots for communication between the main thread (where the GUI objects live) and your secondary thread(s). Basically, you emit signals in one thread that get delivered to the QObjects via the other thread.
    

    大概翻译下,就是说可以通过信号和槽来完成子线程跟GUI所在的主线程的通信,就是通过在子线程释放信号,传递到主线程的槽来完成。

    可惜的是,大佬并没有给出示例代码,那接下来就是动手实践了。

    2)实践

    首先我们在子线程的代码中创建一个对象,并且继承QObject(因为需要释放信号)。

    class UpdateLog(QObject):
        update_signal = pyqtSignal()
     
        def __init__(self):
            QObject.__init__(self)
     
        def update(self):
            self.update_signal.emit()
    

    update_signal = pyqtSignal()就是使用Signal类来创建一个自定义的信号。

    self.update_signal.emit()就是当条件满足的时候,子线程可以调用UpdateLog类的update方法,就会发出信号。

    做完这些之后,主线程中别忘了连击信号和槽,比如self.afk.utils.logger.update_signal.connect(self.write_log)。然后现在再尝试运行程序,就没有任何问题了。

    不仅如此,其实其它需要共享的信息,也可以通过自定义信号和槽来传递。

    那么,现在就可以愉快的在PyQt程序中使用threading模块了。

    0x0? 小结

    本文只是抛砖引玉,上面这些只是PyQt5的入门内容。不过学会了简单的交互方法,其它的也差不多能依葫芦画瓢做出来。

    本文中设计的程序在/assets/code/pyqt5中。

    那么,就先写到这里了!

    0xff Info

    我不是大佬,不是CS专业的,水平相对比较菜,只是一个对计算机感兴趣的业余爱好者,在这方面基本上是自学成才,毕竟兴趣是第一生产力嘛~

    我的GitHub

    其中这个tree项目的GitHub Page就放了些乱七八糟的自学笔记,有到处搜刮的也有原创的。有帮助的话不如给我这个tree项目点个星呗(手动滑稽)。

    展开全文
  • Altium Designer初学教程(一)

    万次阅读 多人点赞 2018-07-13 19:55:18
    安装说明及如何激活并申请添加license安装说明及如何激活并申请添加 license 我们提供的安装光盘可以在每台电脑上安装 Altium Designer 软件。我们为每个单位或公 司产生一个用户号,我们为每台电脑产生一个激活码,...

    安装说明及如何激活并申请添加license

    安装说明及如何激活并申请添加 license

    我们提供的安装光盘可以在每台电脑上安装 Altium Designer 软件。我们为每个单位或公 司产生一个用户号,我们为每台电脑产生一个激活码,用户在软件的 license 界面里输入用户号和激活 码,软件将自动产生本机的一个二进制信息文件,用这个信息文件通过电子邮件到我们的服务器上换 取本机的 license.有了本机的 license,就可以使用 Altium Designer 软件了. 具体的操作请参照《 操作 步骤》文档。 注意:每个电脑用一个激活码,每个激活码只能用在一台电脑上,不能再用在别的电脑 上。 也可以按照以下步骤操作:

    1:左键点击左上角 DXP\Licensing 进入 license 界面

    输入客户号码和激活码,产生本机的信息文件. 保存这个本机信息文件。

    通过邮件,把这个本机信息文件发作为附件发到我们的激活邮箱,不久, 我们的邮箱就会 回给你邮件,并附带这个本机的 License.

    最后,等待接收来自 Altium 公司的 License file 文档,然后将文档添加到 DXP2004 平台上。 然后,通过在 license 界面里的 Add License file 按键,指定添加 License file 文档。

    在Altium Designer 中进行原理图和PCB的设计

    在 DXP 主页面下(打开软件时缺省设置就出现 DXP 主页,如果不是,可以通过左键点 击 View\Home 来打开 DXP 主页),用鼠标左键点击 File\New\Project\PCB Project,左边的工程 资源管理器中就出现了一个名为 PCB_Project1.PrjPCB 的 PCB 工程, 现在可以左键点击 File\Save Project as 来改变项目的保存路径和项目名称。

    在项目名称上右键点击,在引处的菜单中选择 Add new to Project\Schematic,这样,在当前的工 程当中添加了一个新的原理图文件 Sheet.schDoc, 原理图文件上右键点击,在引处的菜单中选 择 Save as 来改变原理图名称和保存路径。

    现在,我们已经在一个 PCB 工程中添加了一张空白的原理图了。

    在原理图的下方偏右的边框上,左键点击 System\Libraries,打开库文件,在库文件的 面板里左键点击 Libraries 可以对当前使用的库文件进行添加,移出和排序。

    接下来, 要从元器件库中拖出我们需要的元器件, 用线把它们了连起来, 完成原理图设计。

    从元器件库选中需要的元器件,按 Place 或 拖出我们需要的元器件,左键点击 Place\Bus 和 Plaec\Wire ,用线或总线把它们连起来,并且给所有的元器件加上相应的标号( Designator) , 保存完成原理图设计。(要注意的是,如果你还要进行 PCB 设计,你选的器件就必须要有相 应的 Footprint 封装。如果你还要进行功能仿真,你选的器件就必须要有相应的 Simulation 模 型文件。如果你还要进行信号完整性分析,你选的器件就必须要有相应的 Signal integrity 模型 文件。)

    完成原理图设计后,左键点击原理图名称,在引出的菜单中左键点击 Compile Document xxx.SCHDOC ,(xxx 是用户自己定义的文件名),对这个原理图文件进行编译,如果有什么错误信息就会自动启动消息窗口( Message),来提示用户那里有什么样的错误。经检查没有错误 后,保存原理图。

    在项目名称上右键点击,在引处的菜单中选择 Add new to Project\PCB,这样,在当前的 工程当中添加了一个新的 PCB 文件 PCB1.PcbDoc,在 PCB 文件上右键点击,在引出的菜单中 选择 Save as 来改变 PCB 文件名称和保存路径。

    左键双击 PCB 文件在工程资源管理器中的图标,打开这个 PCB 文件 ,左键点击 Design\Board Shape\ Redefine Board Shape 命令, 这时,就会出现绿色的背景,光标上就出现 一个十字交叉, 移动鼠标,这个十字交叉就会跟着移动,用这个光标在背景上画出一个封闭 的曲线,这个曲线内部部分就是定义的 PCB 板。

    左键点击 PCB 编辑器下方用来选择当前工作层的图标,选中 Keep-Out Layer,在当前 层上,选择 Place\Line 命令,在 Keep-Out Layer 层上画一个边框,作为我们的布局布线的外围 约束边框,保存文件和工程。

    在当前的 PCB 编辑器环境下,左键点击 Design\Import Changes From xxx..PrjPCB, 会自动跳出来 Engineering Change Order 对话框,列出了对 PCB 文件加载网表的一些具体操 作。 添加的有: Componet Class(器件类), Components(器件) ,Nets(网络连接), Rooms (空间)。

    在当前的 PCB 编辑器环境下,左键点击 Design\Import Changes From xxx..PrjPCB, 会自动跳出来 Engineering Change Order 对话框,列出了对 PCB 文件加载网表的一些具体操 作。 添加的有: Componet Class(器件类), Components(器件) ,Nets(网络连接), Rooms (空间)。

    展开全文
  • 安装PyQt5时缺少designer.exe的解决办法

    万次阅读 多人点赞 2017-08-21 14:22:28
    安装环境:Windows 7  Python 3.5  PyCharm Community Edition 2017.1.5 x64  按照 https://riverbankcomputing.com/software/pyqt/download5 介绍的方法,使用 pip3 install

    安装环境:Windows 7

                        Python 3.5

                        PyCharm Community Edition 2017.1.5 x64

            按照 https://riverbankcomputing.com/software/pyqt/download5 介绍的方法,使用 pip3 install PyQt5安装PyQt5.9版本后发现在./Python/Lib/site-packages/PyQt5目录下没有designer.exe工具,在PyCharm的External Tools中找不到designer.exe,查阅资料后发现有如下解决方法:


    方法一:

             安装缺少的PyQt5 tools,可使用以下源:

    pip install PyQt5-tools -i pypi.douban.com/simple --trusted-host=pypi.douban.com

             安装完成后,在./Python/Lib/site-packages/pyqt5-tools目录下可找到designer.exe,此后可在PyCharm中找到并添加designer.exe



    方法二:

            调用QT5.8的designer.exe,此方法需要安装QT。

            在https://www.qt.io/cn/qt-for-application-development/中下载并安装QT后,在./QT/5.8/mingw53_32/bin中找到designer.exe并添加即可


    展开全文
  • Designer 免费版

    2020-07-19 23:31:31
    斑马条码软件 Designer 免费版 安装即用。
  • PyQt5+Qt designer实战

    万次阅读 多人点赞 2019-05-05 14:56:22
    PyQt5+Qt designer 制作计算器 配置说明: Anaconda 4.2.0 (64-bit) Python 3.5.2 首先,在Qt designer里面设计界面: 打开 Qt designer后,设计界面如下所示: 保存为clat.ui。然后将其转为py文件: ...

    PyQt5+Qt designer 制作计算器

    配置说明:

    Anaconda 4.2.0 (64-bit)

    Python 3.5.2

    首先,在Qt designer里面设计界面:

    打开 Qt designer后,设计界面如下所示:

    保存为clat.ui。然后将其转为py文件:

    之后会生产clat.py文件。

    打开后,代码如下:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'clat.ui'
    #
    # Created by: PyQt5 UI code generator 5.6
    #
    # 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(746, 455)
            self.widget = QtWidgets.QWidget(Form)
            self.widget.setGeometry(QtCore.QRect(81, 31, 512, 399))
            self.widget.setObjectName("widget")
            self.gridLayout = QtWidgets.QGridLayout(self.widget)
            self.gridLayout.setContentsMargins(0, 0, 0, 0)
            self.gridLayout.setObjectName("gridLayout")
            self.textBrowser = QtWidgets.QTextBrowser(self.widget)
            self.textBrowser.setObjectName("textBrowser")
            self.gridLayout.addWidget(self.textBrowser, 0, 0, 2, 4)
            self.calendarWidget = QtWidgets.QCalendarWidget(self.widget)
            self.calendarWidget.setObjectName("calendarWidget")
            self.gridLayout.addWidget(self.calendarWidget, 1, 4, 1, 2)
            self.lineEdit = QtWidgets.QLineEdit(self.widget)
            self.lineEdit.setObjectName("lineEdit")
            self.gridLayout.addWidget(self.lineEdit, 2, 0, 1, 5)
            self.pushButton_19 = QtWidgets.QPushButton(self.widget)
            self.pushButton_19.setObjectName("pushButton_19")
            self.gridLayout.addWidget(self.pushButton_19, 4, 0, 1, 1)
            self.pushButton_17 = QtWidgets.QPushButton(self.widget)
            self.pushButton_17.setObjectName("pushButton_17")
            self.gridLayout.addWidget(self.pushButton_17, 4, 1, 1, 1)
            self.pushButton_18 = QtWidgets.QPushButton(self.widget)
            self.pushButton_18.setObjectName("pushButton_18")
            self.gridLayout.addWidget(self.pushButton_18, 4, 2, 1, 1)
            self.pushButton_1 = QtWidgets.QPushButton(self.widget)
            self.pushButton_1.setObjectName("pushButton_1")
            self.gridLayout.addWidget(self.pushButton_1, 4, 3, 1, 3)
            self.pushButton_14 = QtWidgets.QPushButton(self.widget)
            self.pushButton_14.setObjectName("pushButton_14")
            self.gridLayout.addWidget(self.pushButton_14, 6, 0, 1, 1)
            self.pushButton_15 = QtWidgets.QPushButton(self.widget)
            self.pushButton_15.setObjectName("pushButton_15")
            self.gridLayout.addWidget(self.pushButton_15, 6, 1, 1, 1)
            self.pushButton_16 = QtWidgets.QPushButton(self.widget)
            self.pushButton_16.setObjectName("pushButton_16")
            self.gridLayout.addWidget(self.pushButton_16, 6, 2, 1, 1)
            self.pushButton_2 = QtWidgets.QPushButton(self.widget)
            self.pushButton_2.setObjectName("pushButton_2")
            self.gridLayout.addWidget(self.pushButton_2, 6, 3, 1, 3)
            self.pushButton_11 = QtWidgets.QPushButton(self.widget)
            self.pushButton_11.setObjectName("pushButton_11")
            self.gridLayout.addWidget(self.pushButton_11, 8, 0, 1, 1)
            self.pushButton_12 = QtWidgets.QPushButton(self.widget)
            self.pushButton_12.setObjectName("pushButton_12")
            self.gridLayout.addWidget(self.pushButton_12, 8, 1, 1, 1)
            self.pushButton_13 = QtWidgets.QPushButton(self.widget)
            self.pushButton_13.setObjectName("pushButton_13")
            self.gridLayout.addWidget(self.pushButton_13, 8, 2, 1, 1)
            self.pushButton_3 = QtWidgets.QPushButton(self.widget)
            self.pushButton_3.setObjectName("pushButton_3")
            self.gridLayout.addWidget(self.pushButton_3, 8, 3, 1, 3)
            self.pushButton_8 = QtWidgets.QPushButton(self.widget)
            self.pushButton_8.setObjectName("pushButton_8")
            self.gridLayout.addWidget(self.pushButton_8, 9, 0, 1, 1)
            self.pushButton_9 = QtWidgets.QPushButton(self.widget)
            self.pushButton_9.setObjectName("pushButton_9")
            self.gridLayout.addWidget(self.pushButton_9, 9, 1, 1, 1)
            self.pushButton_10 = QtWidgets.QPushButton(self.widget)
            self.pushButton_10.setObjectName("pushButton_10")
            self.gridLayout.addWidget(self.pushButton_10, 9, 2, 1, 1)
            self.pushButton_4 = QtWidgets.QPushButton(self.widget)
            self.pushButton_4.setObjectName("pushButton_4")
            self.gridLayout.addWidget(self.pushButton_4, 9, 3, 1, 3)
            self.pushButton_7 = QtWidgets.QPushButton(self.widget)
            self.pushButton_7.setObjectName("pushButton_7")
            self.gridLayout.addWidget(self.pushButton_7, 10, 0, 1, 2)
            self.pushButton_6 = QtWidgets.QPushButton(self.widget)
            self.pushButton_6.setObjectName("pushButton_6")
            self.gridLayout.addWidget(self.pushButton_6, 10, 2, 1, 1)
            self.pushButton_5 = QtWidgets.QPushButton(self.widget)
            self.pushButton_5.setObjectName("pushButton_5")
            self.gridLayout.addWidget(self.pushButton_5, 10, 3, 1, 3)
            self.pushButton = QtWidgets.QPushButton(self.widget)
            self.pushButton.setObjectName("pushButton")
            self.gridLayout.addWidget(self.pushButton, 2, 5, 1, 1)
    
            self.retranslateUi(Form)
            QtCore.QMetaObject.connectSlotsByName(Form)
    
        def retranslateUi(self, Form):
            _translate = QtCore.QCoreApplication.translate
            Form.setWindowTitle(_translate("Form", "Form"))
            self.pushButton_19.setText(_translate("Form", "退出"))
            self.pushButton_17.setText(_translate("Form", "返回"))
            self.pushButton_18.setText(_translate("Form", "清除所有"))
            self.pushButton_1.setText(_translate("Form", "/"))
            self.pushButton_14.setText(_translate("Form", "7"))
            self.pushButton_15.setText(_translate("Form", "8"))
            self.pushButton_16.setText(_translate("Form", "9"))
            self.pushButton_2.setText(_translate("Form", "*"))
            self.pushButton_11.setText(_translate("Form", "4"))
            self.pushButton_12.setText(_translate("Form", "5"))
            self.pushButton_13.setText(_translate("Form", "6"))
            self.pushButton_3.setText(_translate("Form", "+"))
            self.pushButton_8.setText(_translate("Form", "1"))
            self.pushButton_9.setText(_translate("Form", "2"))
            self.pushButton_10.setText(_translate("Form", "3"))
            self.pushButton_4.setText(_translate("Form", "-"))
            self.pushButton_7.setText(_translate("Form", "0"))
            self.pushButton_6.setText(_translate("Form", "."))
            self.pushButton_5.setText(_translate("Form", "="))
            self.pushButton.setText(_translate("Form", "清除缓存"))
    
    

    然后,新建Run.py文件,代码如下:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
    from count.clat import Ui_Form
    
    
    class mwindow(QWidget, Ui_Form):
        def __init__(self):
            super(mwindow, self).__init__()
            self.setupUi(self)
    
        def ps_bt(self):
            self.textBrowser.clear()
    
        def ps_bt1(self):
            self.lineEdit.insert('/')
    
        def ps_bt2(self):
            self.lineEdit.insert('*')
    
        def ps_bt3(self):
            self.lineEdit.insert('+')
    
        def ps_bt4(self):
            self.lineEdit.insert('-')
    
        def ps_bt5(self):
            self.lineEdit.insert('=')
            self.calculate()
    
        def ps_bt6(self):
            self.lineEdit.insert('.')
    
        def ps_bt7(self):
            self.lineEdit.insert('0')
    
        def ps_bt8(self):
            self.lineEdit.insert('1')
    
        def ps_bt9(self):
            self.lineEdit.insert('2')
    
        def ps_bt10(self):
            self.lineEdit.insert('3')
    
        def ps_bt11(self):
            self.lineEdit.insert('4')
    
        def ps_bt12(self):
            self.lineEdit.insert('5')
    
        def ps_bt13(self):
            self.lineEdit.insert('6')
    
        def ps_bt14(self):
            self.lineEdit.insert('7')
    
        def ps_bt15(self):
            self.lineEdit.insert('8')
    
        def ps_bt16(self):
            self.lineEdit.insert('9')
    
        def ps_bt17(self):
            self.lineEdit.backspace()
    
        def ps_bt18(self):
            self.lineEdit.clear()
    
        def ps_bt19(self):
            self.close()
    
        def lineEdit_clear(self):
            self.lineEdit.clear()
    
        def calculate(self):
            # text = self.lineEdit.text()
            # self.lineEdit.setText('%s= %.2f' % (text, eval(text)))
            text = self.lineEdit.text()
            self.textBrowser.append('%s= %.2f' % (text, eval(text)))
            self.lineEdit_clear()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = mwindow()
        w.pushButton.clicked.connect(w.ps_bt)
        w.pushButton_1.clicked.connect(w.ps_bt1)
        w.pushButton_2.clicked.connect(w.ps_bt2)
        w.pushButton_3.clicked.connect(w.ps_bt3)
        w.pushButton_4.clicked.connect(w.ps_bt4)
        w.pushButton_5.clicked.connect(w.calculate)
        w.pushButton_6.clicked.connect(w.ps_bt6)
        w.pushButton_7.clicked.connect(w.ps_bt7)
        w.pushButton_8.clicked.connect(w.ps_bt8)
        w.pushButton_9.clicked.connect(w.ps_bt9)
        w.pushButton_10.clicked.connect(w.ps_bt10)
        w.pushButton_11.clicked.connect(w.ps_bt11)
        w.pushButton_12.clicked.connect(w.ps_bt12)
        w.pushButton_13.clicked.connect(w.ps_bt13)
        w.pushButton_14.clicked.connect(w.ps_bt14)
        w.pushButton_15.clicked.connect(w.ps_bt15)
        w.pushButton_16.clicked.connect(w.ps_bt16)
        w.pushButton_17.clicked.connect(w.ps_bt17)
        w.pushButton_18.clicked.connect(w.ps_bt18)
        w.pushButton_19.clicked.connect(w.ps_bt19)
        w.show()
        sys.exit(app.exec_())

    运行Run.py,可在里面进行数值计算:

    另外,如果想加入界面背景,并且自适应界面的大小,可以在主文件里面这么写:

        def resizeEvent(self, event):
            palette = QPalette()
            pix = QPixmap('resources/background.jpg')
            pix = pix.scaled(self.width(), self.height())
            palette.setBrush(QPalette.Background, QBrush(pix))
            self.setPalette(palette)

    进阶版链接地址:

    https://download.csdn.net/download/shangxiaqiusuo1/10668730

    我曾经跨过山和大海,也穿过人山人海,我曾经拥有着的一切,转眼都飘散如烟,我曾经失落失望失掉所有方向,直到看见平凡才是唯一的答案。
    ——韩寒《平凡之路》

    展开全文
  • 使用PowerDesigner把设计图导出成图片

    千次阅读 2018-08-03 16:37:27
    1: 按住Shift键点击鼠标选择要导出的对象,必须先选择。 2: 选择Edit—>Export Image 到出你需要的格式,如下图
  • 为大家详细介绍下Altuim Designe r等长快捷键命令的使用详细步骤: TR:单端线等长; TI : 差分线等长; “<“减小绕线幅度; ”>”增加绕线幅度; “Y“改变出线的方向;...Ctr...
  • altium Designer使用方法大总结

    万次阅读 多人点赞 2018-08-03 17:01:23
    以前是使用DXP2004来画图的,后来转行。想来已经有一年半的时间没有画过了。突然转到AD,有些不适应。用了下发觉很多功能确实比DXP要来的强大。花了不少时间和精力,将之前的一些经验技巧,进行整理总结。...
  • 网址:https://www.zbpcb.com/,分享下大家一起学习
  • Altium Designer2018下载安装及基本使用

    万次阅读 多人点赞 2020-09-07 21:08:50
    一、Altium Designer2018下载 下载链接:https://pan.baidu.com/s/1gVJre-0tW_T2_oRqclYWAQ 提取码:fnr9 安装步骤请点我! 2、用AD画基本的电路图 1.首先新建一个PCB工程。 如下所示: 2.新建一个原理图 如下所...
  • Qt Designer的安装与汉化教程

    万次阅读 热门讨论 2020-02-29 16:07:46
    第一步:PyQt5的安装 cmd下输入安装指令如下,注意,确保python环境的配置无误 pip install PyQt5 pip install PyQt5-tools ...就是上图的第一个文件就是汉化包,放入即可实现Qt Designer的汉化 再次打开,效...
  • 最近想加强PCB制图技术,去淘宝找到郭天祥老师的视频教程,讲的很详细,很不错!   下载链接:http://pan.baidu.com/share/link?shareid=469955833&uk=1292575798 密码:gh0j
  • 解决QT designer无法打开问题

    万次阅读 2017-01-04 11:13:20
    具体解决措施为:在designer所在的文件夹,找到这个文件“Qt5WebEngineWidgets.dll”,将他的后缀加一个”.bak”就可以了。亲测有效还有的说法是:在“C:\Users\用户名.designer”文件夹下有一个叫“gradients.xml”...
  • QtDesigner中如何手动添加工具栏toolBar

    万次阅读 2016-12-12 16:27:05
    如下图:只需要把Action拖到工具栏中即可
  • Matlab APP Designer Demo

    万次阅读 多人点赞 2018-01-08 15:19:02
    Matlab --- APP Designer  Matlab APP Designer 提供了比GUIDE更加丰富的组件,两者使用方法有所不同,如下图: 然后我们开始新建一个APP Designer。 第一步:点击新建选项-->选择新建APP Designer ,并保存...
  • PyCharm安装配置Qt Designer+PyUIC教程

    万次阅读 多人点赞 2018-09-14 12:33:52
    Qt Designer用于像VC++的MFC一样拖放、设计控件 PyUIC用于将Qt Designer生成的.ui文件转换成.py文件 Qt Designer和PyUIC都包含在PyQt5中,所以我们只需要安装PyQt5塻块然后再指定Qt Designer和PyUIC即可 为了避免...
  • PyQt5 安装QT Designer

    千次阅读 2020-07-16 17:48:17
    PyQt5 5.7版本以后不再在pip安装中提供QT designer,所以需要自己安装。 网上有费官方版的package(for windows系统)https://pypi.org/project/pyqt5-tools/ 其包含pyqt5工具以供安装: pip install pyqt5-tools...
  • Altium Designer 18 安装及破解

    万次阅读 2018-09-28 17:39:43
    破解文件 分享: 链接:https://pan.baidu.com/s/1aslDHmnsQ81YacTnogqfSA  提取码:ne9u
  • 一、将图片资源添加进QtDesigner: 1、用XML格式写一个类似这样的.qrc文件,将图片相对路径添加进去:  images/config.png  images/query.png  images/update.png 2、单击Designer右下方的ResourceBrowser...
  • 首先直接用pip安装的PyQt-tools的Designer是不带翻译文件的,因此我们要把Qt creator中Designer的翻译文件拷贝到Pyqt的Designer目录中。 步骤1 打开Qt creator的translations文件夹。 笔者的路径:F:\Qt...
1 2 3 4 5 ... 20
收藏数 95,757
精华内容 38,302
关键字:

designer