pyqt 界面關閉信號_木辛老師的編程課堂之Python和Qt實戰慕課軟件開發:增加關閉按鈕...

2b4c773358be8ab964e858ac1b8ab290.png
軟件實戰開始,快速提供編程能力;通過實戰,分析產品需求,梳理設計需求,提升項目分析和架構的能力。快點跟著木辛老師一起學習吧!
請點擊右上角“關注”按鈕關注我們喲:跟著木辛老師學習Python編程知識,變身快樂的編程達人吧~

上節課的時候,留了一個小尾巴,不知道大家這幾天有沒有思考過這個問題呢?

“將主窗口的標題欄隱藏之后,發現無法關閉窗口。這應該怎么解決?”

那么,在這一節課里,我們就講一下通過編碼的方式,調用系統方法,將窗口順利的關閉。

目前的登錄頁面還沒有制作完畢,還需要繼續使用登錄頁面的設計稿。

5e3cb7e0a9b015f903323479ee0a21eb.png

登錄界面設計稿

如果大家需要復習一下信號和槽的知識,可以參考一下木辛老師之前的一篇教程,傳送門:《木辛老師的編程課堂:Python和Qt之頁面布局實戰篇(2)》。

增加關閉按鈕

我們需要先按照設計稿的要求,在主窗口中添加一個關閉按鈕:“x”。

將關閉按鈕的素材圖片拷貝到當前項目的images目錄下,姑且名字就叫做:

close_windows.png 

打開Qt Designer開發工具,在彈出的對話框中點擊“打開”按鈕,選擇構建登錄頁面的.ui文件,在這里是“LoginMainWin.ui”;

雙擊打開,或者單擊選中這個文件之后,點擊右下角的“打開”按鈕。

498b5e4f0286b26eb0b859539442bd74.png

打開登錄界面文件

成功打開之后,大家就可以看到之前尚未完成的登錄頁面。

拖拽左側Buttons區的QPushButton到主窗口,并按照設計稿將這個按鈕放置在560px x 10px的位置。

04ce8a88e598ab646d207fde667fa7d4.png

通過右側的屬性編輯窗口,修改geometry屬性,將這個控件的X、Y、寬度和高度分別修改為:560、10、25、20。

起個名字

在之前的課程里,并沒有提到這個關閉按鈕,所以,這個關閉按鈕目前還沒名沒姓,屬于一個黑戶!

那咱們給他起一個名字吧,按照之前的規定,這個關閉按鈕就叫它:

btn_close_window

同時,一定要修改這個控件的objectName屬性喲,否則無法通過btn_close_window這個名字找到這個控件。

具體方法就是:選中這個控件,在屬性編輯窗口中修改QObject中的objectName字段,將這個字段的值修改為btn_close_window就可以了。

好了,目前位置我們已經將關閉按鈕添加好了,保存程序;進入PyCharm軟件,右鍵點擊LoginMainWin.ui文件,在彈出來的菜單中選擇“External Tools”中的“PyUIC”插件,將.ui文件轉換為.py文件。

1c7f66a7d1a49527e535946617709eb9.png

轉換.ui文件為.py文件

此時,打開LoginMainWin.py文件,咱們一起看看代碼有沒有更新吧。

f13e36daf1912ee85d335b04a5bf442c.png

查看python文件的變化

可以看到,代碼中出現了剛才添加的QPushButton控件,并通過對象的setGeometry方法,將對應的屬性成功傳遞。

按鈕加載圖片

接下來,需要將關閉按鈕的圖像放置上去了。

pixmap = QtGui.QPixmap(QtGui.QImage('images/close_windows.png'))
self.btn_close_window.setIcon(QtGui.QIcon(pixmap))
self.btn_close_window.setIconSize(QSize(10, 10))

我們通過實例化了一個QPixmap對象,加載了關閉按鈕的圖片文件,通過使用QPushButton的setIcon方法,將這個pixmap設置為QPushButton上的一個小圖標,同時還將圖標尺寸設置為10x10px,這樣看起來更美觀一些。

fdcea3489a4423e2b5bb76c8c389491e.png

增加關閉按鈕之后的效果

看著挺不錯的,(#^.^#)。

好了,已經添加完關閉按鈕了,咱們這個頁面又做完一個新功能,收工吧。

咦······,怎么還是沒法關閉這個窗口呀!

這是怎么回事啊,已經將關閉按鈕添加上去了,為什么還不能關閉呢?

是這樣的,我們僅僅是將按鈕放置到了主窗口上,并沒有給它添加事件;也就是說,在我們點擊了按鈕之后,它并不知道要做什么,所以,只能呆呆的沒有反應。

教程開始的時候,提到過需要先復習一下“信號和槽”的相關知識,在這里就需要用到了。

添加事件

我們需要給關閉按鈕添加事件,讓按鈕作為一個事件發起者,發送出一個關閉信號。

這個事件在什么情況下發生呢?

當我們點擊關閉按鈕的時候,需要通知系統:我們想要關閉當前主窗口,請快快把主窗口關閉吧!

具體代碼可以這么寫:

self.btn_close_window.clicked.connect(self.close)

調用QPushButton的clicked方法,并通過其connect,將這個信號發送給系統的close方法,完成關閉主窗口的操作。

邏輯就是這么簡單的!

咱們重新梳理下流程哈

  1. 在這里的定義關閉按鈕是信號發出者
  2. 當點擊關閉按鈕之后,會發射一個信號
  3. 通過connect方法,將這個按鈕的電機事件連接到了主窗口的關閉事件上
  4. 接收者窗體在接收到關閉信號之后,將運行槽函數close(),將主窗口關閉。

這么一講,大家是不是就能理解信號和槽機制的運行機理了呢?

好了,咱們的關閉按鈕完工咯!

不對!發現一個問題,這個關閉按鈕四周有一個邊框呢,這個在設計稿里可以沒有的。咱們需要想想辦法把這個邊框去掉吧。

這樣吧,今天咱們就把這個問題留作一個思考問題,請大家想想:如何去掉按鈕的邊框吧。

下一節課中,我們會引入一個新的概念,實現去掉按鈕的邊框。

請持續關注木辛老師的編程課喲,后續更多精彩陸續到來!

快樂編程,快樂成長!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396295.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從零開始nodejs系列文章

http://blog.fens.me/series-nodejs/轉載于:https://www.cnblogs.com/chinafbi/p/5394482.html

Leetcode589.N-ary Tree Preorder TraversalN叉樹的前序遍歷

給定一個 N 叉樹&#xff0c;返回其節點值的前序遍歷。 class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val _val;children _children;} };//遞歸 class Solution { public:vector<int> res;vect…

打破雙親委派么,怎么打破_質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。...

打破雙親委派么,怎么打破by Derwin由Derwin 質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。 (Quality Assurance is broken. Here’s how we can make it as agile as everything else.) Process is the key to great software.過程是出色軟件的關鍵。 In gen…

android java.lang.linkageerror_使用eclipse中的maven構建web應用出現 java.lang.LinkageError異常...

????: Servlet.service() for servlet [jsp] in context with path [/webdemo] threw exception [java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different typ…

android 鍵盤遮蓋輸入框_Android軟鍵盤擋住輸入框的終極解決方案

前言開發做得久了&#xff0c;總免不了會遇到各種坑。而在Android開發的路上&#xff0c;『軟鍵盤擋住了輸入框』這個坑&#xff0c;可謂是一個曠日持久的巨坑——來來來&#xff0c;我們慢慢看。入門篇最基本的情況&#xff0c;如圖所示&#xff1a;在頁面底部有一個EditText&…

最全面的幾何畫板實用教程視頻免費下載

不同的選擇就會有不同的人生夜&#xff0c;這里小編為奮斗在教學一線的老師們送個大福利&#xff0c;這也是老師們充實自己的好去處。作為數學老師一枚&#xff0c;在平時的教學中應該用到很多教學輔助軟件&#xff0c;而幾何畫板就是其中一款。眾所周知&#xff0c;幾何畫板是…

Redis(1):簡介

2019獨角獸企業重金招聘Python工程師標準>>> Redis之父Salvatore Sanfilippo于2009年將Redis開源。VMware公司從2010年開始贊助Redis的開發&#xff0c;Salvatore Sanfilippo和Pieter Noordhuis(另一名主要的代碼貢獻者)同年加入VMware&#xff0c;全職開發Redis。R…

小程序服務器域名5次_為什么您不應該在100美元的服務器上用5天的時間構建面向500,000個用戶的應用程序...

小程序服務器域名5次by Howard Lo霍華德羅 為什么您不應該在100美元的服務器上用5天的時間構建面向500,000個用戶的應用程序 (Why you shouldn’t build an app aimed at 500,000 users in 5 days on a $100 server) A few days ago, I read Erik Duindam’s “How I built an…

tp5 異步處理_tp5框架ajax異步添加數據的代碼實現

本篇文章給大家帶來的內容是關于tp5框架ajax異步添加數據的代碼實現&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。ajax異步無刷新處理數據的用戶體驗還是不錯的&#xff0c;在我們的項目開發中算是經常使用到的一個知識點。…

java中類型轉換的造型_Java總結篇系列:類型轉換/造型

Java中&#xff0c;經常可以遇到類型轉換的場景&#xff0c;從變量的定義到復制、數值變量的計算到方法的參數傳遞、基類與派生類間的造型等&#xff0c;隨處可見類型轉換的身影。Java中的類型轉換在Java編碼中具有重要的作用。首先&#xff0c;來了解下數據類型的基本理解&…

Google Maps API V3 之 路線服務

Google官方教程&#xff1a; Google 地圖 API V3 使用入門 Google 地圖 API V3 針對移動設備進行開發 Google 地圖 API V3 之事件 Google 地圖 API V3 之控件 Google 地圖 API V3 之 疊加層 Google Maps API V3 之繪圖庫 信息窗口 Google Maps API V3 之 圖層 Google Maps API …

day 04 作業 循環和分之

# 讀程序&#xff0c;總結程序的功能:"""1.求2 的20次方numbers1for i in range(0,20):numbers*2print(numbers)2.求100以內能整除3 或 7的數&#xff0c;并21不能整除的數summation 0num 1while num<100: if (num%30 or num%70) and num%21!0: …

Mysql數據庫多實例配置

二進制安裝&#xff1a; [rootlufengcentos ~]# mkdir /home/lufeng/tools -p [rootlufengcentos ~]# cd /home/lufeng/tools [rootlufengcentos tools]# rz [rootlufengcentos tools]# tar xf mysql-5.5.49-linux2.6-x86_64.tar.gz [rootlufengcentos tools]# mkdir -p /ap…

了解ES6 The Dope Way第三部分:模板文字,擴展運算符和生成器!

by Mariya Diminsky通過瑪麗亞迪明斯基(Mariya Diminsky) 了解ES6 The Dope Way第三部分&#xff1a;模板文字&#xff0c;擴展運算符和生成器&#xff01; (Learn ES6 The Dope Way Part III: Template Literals, Spread Operators, and Generators!) Welcome to Part III of…

Jenkins --SVN

項目名稱&#xff1a;XXX 源碼管理&#xff1a; None 發布之前&#xff0c;獲取源碼 編譯獲取后的代碼&#xff0c;指定vs版本 將源碼拷貝至jenkins工作控件 d:\jenkins\workspace\.. 刪除指定文件 用管理員命令 將Jenkins工作空間的代碼發布至指定路徑轉載于:https://www.cnbl…

keil5圖標變成白色_電腦桌面圖標全部變成白色的解決辦法

系統桌面圖標全部變成一個樣子的白色圖標&#xff0c;這是怎么回事&#xff1f;電腦桌面的圖標全部變成白色該如何解決&#xff1f;下面為大家解答。解決辦法&#xff1a;1.首先嘗試最簡單的方法操作看看&#xff0c;登錄到系統桌面&#xff0c;右鍵桌面空白處點擊打開“個性化…

java 繪圖球的移動_求助在JFrame上繪制移動的小球

我想在JFrame中或者Frame中添加一張背景圖片&#xff0c;然后在這圖片上畫出會移動的小球&#xff0c;怎么實現&#xff1f;我的代碼把添加背景圖片去掉&#xff0c;小球就正常運行了&#xff0c;怎么修改啊&#xff1f;希望各位大俠指教不勝感激&#xff01;&#xff01;&…

apache mesos_試用Apache Mesos HTTP API獲得樂趣和收益

apache mesosby Marco Massenzio由Marco Massenzio 試用Apache Mesos HTTP API獲得樂趣和收益 (Experimenting with the Apache Mesos HTTP API for Fun and Profit) Apache Mesos is a tool used in production at large-scale services like Twitter and Airbnb. Here’s it…

epoll哪些觸發模式_5.epoll的水平觸發和邊緣觸發

本篇是多路復用的第五篇&#xff0c;主要來講解epoll的水平觸發和邊緣觸發是怎么回事。一、概念介紹EPOLL事件有兩種模型&#xff0c;水平出發和邊緣觸發&#xff0c;如下所示&#xff1a;1. Level Triggered (LT) 水平觸發1. socket接收緩沖區不為空 有數據可讀 讀事件一直觸發…

HC系列藍牙模塊連接單片機與電腦,傳輸數據(藍牙心電測試)

畢設做無線心電監護。有線的做出來了&#xff0c;AD8232MCULabVIEW上位機。pcb還沒時間搞&#xff0c;這個9*7*2.5cm拿來測試能用。 自己做了AD8232的模擬前端&#xff0c;打的板子還沒到沒法測試。 雖然比較水&#xff0c;但看起來任務也完成的差不多了&#xff0c;于是就想加…