7wu1wm0 发表于 2024-8-17 16:14:14

Python+PyQt架构:运用设计师编写界面程序入门示例


    <div style="color: black; text-align: left; margin-bottom: 10px;">
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">PyQt是Qt界面库在Python下的绑定,为在Python语言下编写GUI界面程序<span style="color: black;">供给</span>了<span style="color: black;">极重</span>的便利。<span style="color: black;">针对</span>界面程序的设计,<span style="color: black;">能够</span><span style="color: black;">运用</span>代码构建,<span style="color: black;">亦</span><span style="color: black;">能够</span>借助于其<span style="color: black;">供给</span>的设计师(Qt Designer)工具来构建。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下面给出一个在Python语言中<span style="color: black;">运用</span>PyQt界面库及设计师工具编写界面程序的入门例子。</p>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">例子说明</strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">该例运行界面如下图所示,<span style="color: black;">包含</span>了常用软件界面<span style="color: black;">必须</span>的几个区域部分:菜单栏、工具栏、状态栏及主窗口<span style="color: black;">表示</span>区域,其中,主窗口<span style="color: black;">表示</span>区域<span style="color: black;">运用</span>水平及垂直分割条控件以左一右二的形式分为了三个窗口部分。</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/8a2ff5e03fc94aa8a600114f5b040f6a~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=89gFCGm2ov7aFwkx8xd6zE9RWAQ%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">工具栏的<span style="color: black;">表示</span>样式可<span style="color: black;">经过</span>菜单设置为"仅<span style="color: black;">表示</span>图标"或"<span style="color: black;">表示</span>图标和文字"两种样式。<span style="color: black;">另一</span>,<span style="color: black;">经过</span>点击工具栏上窗口视图的下拉菜单可设置右面两个窗口的<span style="color: black;">表示</span>或<span style="color: black;">隐匿</span>状态。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下面看下怎么在设计师(Qt Designer)中来实现这个界面程序的设计。</p>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">前提<span style="color: black;">要求</span></strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">假定你<span style="color: black;">运用</span>的IDE是PyCharm,并且<span style="color: black;">已然</span>配置了如下图所示三个常用工具:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/dc50d6b122a845b39cc4838f01654872~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=uh%2F8Cqpl2W4ghiNkAJ87v%2FY1jzs%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">详细</span>的配置<span style="color: black;">办法</span>可参考前面的<span style="color: black;">文案</span>:</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这三个常用工具都<span style="color: black;">能够</span>在PyCharm的右键菜单中操作,功能简要说明如下:</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Qt Designer:<span style="color: black;">能够</span>在PyCharm中<span style="color: black;">研发</span>环境中快速打开设计师(Qt Designer)工具。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">PyUIC:将Qt Designer设计的".ui"界面文件转换成".py"文件。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Rcc2Py:将Qt Designer设计中用到的资源文件".qrc"文件转换成".py"文件。</p>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">软件界面<span style="color: black;">运用</span>设计师(Qt Designer)工具的设计过程</strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">1、新建UI文件</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">打开设计师,新建一个窗体,模板<span style="color: black;">选取</span>为Main Window,如下图所示,并<span style="color: black;">保留</span>为"Main.ui"文件:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/c64bec8c24be4c8ea758a8808ab9e66b~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=tV25UryjTvW9Flkfz55HsWOtdbY%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">2、新建资源文件</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在设计师的资源浏览器中新建一个资源文件<span style="color: black;">保留</span>名<span style="color: black;">叫作</span>为"MyRes.qrc",将本例界面中用到的图标等资源文件添加到该文件中,如下图所示(前缀设置为空,图标文件<span style="color: black;">保留</span>在当前程序所在目录的img子文件夹下):</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/1f5483c07cdf41edae4ae859a6c4fd46~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=wt%2FzxY9q7ASAZvA2KQz2yPm5YBA%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">3、在动作编辑器编辑<span style="color: black;">各样</span>action</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">菜单栏、工具栏上的大部分功能都<span style="color: black;">能够</span><span style="color: black;">经过</span>动作编辑器完成,<span style="color: black;">能够</span>设置<span style="color: black;">每一个</span>action的名<span style="color: black;">叫作</span>、文本、快捷键、<span style="color: black;">是不是</span>可选、工具提示等信息,本例中动作编辑完成后如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/bdaa065397b94eab9fe9ca6f56aaaf38~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=P9R9pZh9ePIxkr7FuAVSeg%2FPBsc%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">4、菜单栏设计</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过</span>拖放前面创建的action,可在设计师中完成菜单栏的设计,<span style="color: black;">针对</span>本例,设计完成后文件、选项-工具栏样式及选项-窗口视图菜单项分别如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/0218a972ece54688872b47e6a0317237~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=gpFckf6hESjK0zCg9hqrQfCvhOA%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">5、工具栏设计</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">同菜单栏设计过程类似<span style="color: black;">经过</span>拖放前面创建的action完成工具栏的设计,本例中工具栏编辑完成后如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/6b79a9ce906d4028894f43dcbcf41e28~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=mPawdhsTZ3KGVcSdlTj%2BjG1mE1I%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">必须</span>说明的是,本例工具栏还<span style="color: black;">包含</span>一个带下拉菜单的QToolButton控件,在设计师中<span style="color: black;">不可</span>直接将其放到工具栏区域中,后面需在代码中手动创建该控件。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">6、状态栏设计</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本例状态栏比较简单,<span style="color: black;">仅在</span>状态栏中添加一个QLabel控件作一个简单的信息<span style="color: black;">表示</span><span style="color: black;">就可</span>。<span style="color: black;">一样</span>,在设计师中<span style="color: black;">不可</span>直接将QLabel控件放到状态栏区域中,后面需在代码中手动创建该控件。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">7、主<span style="color: black;">表示</span>区域设计</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本例中,主<span style="color: black;">表示</span>区域分为左一右二的三个窗口,<span style="color: black;">运用</span>分割条进行布局。为简单起见,本例<span style="color: black;">运用</span>三个"Plain Text Edit"控件<span style="color: black;">做为</span><span style="color: black;">表示</span>窗口。在设计师中拖放三个状态栏"Plain Text Edit"控件到主窗口区域中,分别命名为leftWnd、rightWnd1和rightWnd2,<span style="color: black;">同期</span>,在属性编辑器设置三个控件的plainText属性分别为左窗口、右窗口1、右窗口2。<span style="color: black;">而后</span>选中rightWnd1和rightWnd2,在设计师中<span style="color: black;">选取</span>"<span style="color: black;">运用</span>分裂器垂直布局",完成右面两个窗口的垂直布局。<span style="color: black;">而后</span>再选中这个垂直布局和leftWnd窗口,在设计师中<span style="color: black;">选取</span>"<span style="color: black;">运用</span>分裂器水平布局",<span style="color: black;">这般</span><span style="color: black;">运用</span>水平分割条完<span style="color: black;">成为了</span><span style="color: black;">全部</span>界面左、右两部分的水平布局。如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/aed3357dcfd8495597b60cf17fe08d06~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=kUnDqiPCo%2FUp7AM9cFE44BLRgas%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">8、信号/槽的设计</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在设计师的信号/槽编辑器中可完成信号与槽函数的<span style="color: black;">相关</span>,<span style="color: black;">针对</span>本例,将动作actExit<span style="color: black;">相关</span>到主窗口的关闭事件中,<span style="color: black;">这般</span>,在工具栏中点击退出按钮时,可退出该程序,如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/376cb3bea2344359a2a24e30c8bda888~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=YATpN7GNKV%2BcdRAWbxYUoyWPZi4%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">至此,在设计师中完<span style="color: black;">成为了</span><span style="color: black;">全部</span>界面的设计,<span style="color: black;">保留</span>文件。该界面中<span style="color: black;">触及</span>到的所有界面对象元素如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/f59db2f8efa14efeb666dce89be4f53b~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=kyDYfYzNmNu621lncEGzndMuapM%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">界面文件至Python文件的转换</strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在设计师中界面设计完成后,<span style="color: black;">咱们</span>得到了两个文件:"Main.ui"界面文件和"MyRes.qrc"资源文件,需将这两个文件转换为Python能够识别的文件,这就用到了前面<span style="color: black;">说到</span>的<span style="color: black;">已然</span>集成好的两个工具"PyUIC"和"Rcc2Py"。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在PyCharm<span style="color: black;">研发</span>环境中,选中这两个文件,在右键菜单中分别<span style="color: black;">选取</span>"PyQt4--&gt;PyUIC"和"PyQt4--&gt;Rcc2Py"<span style="color: black;">就可</span>完成这两个文件的转换。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">转换完成后,生<span style="color: black;">成为了</span>两个新的文件,分别为界面文件"Ui_Main.py"和资源文件"MyRes_rc.py"。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">其中,"Ui_Main.py"文件中<span style="color: black;">重点</span>定义了一个界面布局类"Ui_MainWindow",在该类中,会自动导入"MyRes_rc.py"的内容。</p>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">主程序"Main.py"的编写</strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在PyCharm<span style="color: black;">研发</span>环境中新建一个Python文件"Main.py"。其调用界面文件的<span style="color: black;">重点</span>思路为:</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">定义一个类MainWindow,继承自QMainWindow和Ui_MainWindow类,在该类中实现设计师中<span style="color: black;">不可</span>完成的界面元素,如本例中工具栏上的下拉菜单按钮和状态栏上的label控件等,实现信号与槽函数的<span style="color: black;">相关</span>,完成槽函数的实现。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">MainWindow类的<span style="color: black;">详细</span>实现代码如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p26-sign.toutiaoimg.com/pgc-image/7eabaafe04b9453c9c754c278d6150b7~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=OvuoxB3A3t8STNJgmBAVdnrBdhk%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">对<span style="color: black;">以上</span>代码说明如下:</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第16-45行,类的初始化函数。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第20-36行,添加设计师中<span style="color: black;">不可</span>完成的界面元素,<span style="color: black;">仔细</span>请参考注释。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第38-40行,实现两个动作与槽函数的<span style="color: black;">相关</span>,用以设置工具栏的样式和右边两个窗口<span style="color: black;">是不是</span>可见。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第42-45行,设置主分割条mainSplitter的<span style="color: black;">上下</span>两边的比例,并将其设置为主窗口的中心部件。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">第47-57行,两个槽函数的<span style="color: black;">详细</span>实现。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">程序的完整测试代码如下图所示:</p>
      <div style="color: black; text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/pgc-image/19467b57630140cdadd28a6978be1b8d~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1723893312&amp;x-signature=ddMNJxVClk9MVr19c0sEPX1Umqg%3D" style="width: 50%; margin-bottom: 20px;"></div>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">程序运行后,<span style="color: black;">就可</span>看到本文开头的<span style="color: black;">说到</span>的界面运行图。</p>
      <h1 style="color: black; text-align: left; margin-bottom: 10px;"><strong style="color: blue;">备注</strong></h1>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">本例<span style="color: black;">研发</span>环境配置:Python2.7 + PyQt4。</p>
      <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">倘若</span>你觉得这篇<span style="color: black;">文案</span>对你有用的话,抖抖小手<strong style="color: blue;">点个赞</strong>吧。</p>
    </div>




dhfgh 发表于 2024-8-28 06:37:10

你的话语真是温暖如春,让我心生感激。

364463952 发表于 2024-9-10 07:09:19

我完全同意你的观点,说得太对了。

wrjc1hod 发表于 2024-9-28 05:21:46

外链发布社区 http://www.fok120.com/

wrjc1hod 发表于 2024-10-1 02:57:07

论坛的成功是建立在我们诚恳、务实、高效、创新和团结合作基础上,我们要把这种精神传递下去。

j8typz 发表于 6 天前

期待更新、坐等、迫不及待等。

4lqedz 发表于 5 天前

谢谢、感谢、感恩、辛苦了、有你真好等。

nqkk58 发表于 4 天前

你的话语真是温暖如春,让我心生感激。
页: [1]
查看完整版本: Python+PyQt架构:运用设计师编写界面程序入门示例