日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python GUI庫圖形界面開發(fā)之PyQt5信號與槽多窗口數(shù)據(jù)傳遞詳細使用方法與實例

瀏覽:31日期:2022-08-03 11:55:55

在pyqt5編程過程中,經(jīng)常會遇到輸入或選擇多個參數(shù)的問題,把多個參數(shù)寫到一個窗口中,主窗口會顯得很臃腫,所以,一般是添加一個按鈕,調(diào)用對話框,在對話框中進行參數(shù)的選擇,關閉對話框?qū)?shù)返回給主窗口

pyqt提供了一些標準的對話框類,用于輸入數(shù)據(jù),修改數(shù)據(jù),更改應用的設置等,常見的有QFileDialog,QInputDialog,QColorDialog, QFontDialog等,在不同的窗口之間傳參數(shù)有兩種常用的方式,一種在自定義對話框之間通過屬性傳參,另一種在窗口之間使用信號與槽機制傳參,這里主要介紹第一種

單一窗口的數(shù)據(jù)傳遞實例

對于具有單一窗口的程序來說,一個控件的變化會影響另一個控件的變化,這中變化利用信號與槽的關系非常容易解決

import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *class WinForm(QWidget): def __init__(self): super(WinForm, self).__init__() self.initUI() def initUI( self ): #先創(chuàng)建水平滑塊和Lcd控件 lcd=QLCDNumber(self) slider=QSlider(Qt.Horizontal,self) #垂直布局,添加控件 vbox=QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(slider) #設置窗口布局 self.setLayout(vbox) #設置滑塊數(shù)值信號改變連接Lcd的更新 slider.valueChanged.connect(lcd.display) #設置初始位置以及初始大小,設置標題 self.setGeometry(300,300,350,150) self.setWindowTitle(’信號與槽:連接滑塊LCd’)if __name__ == ’__main__’: app=QApplication(sys.argv) form=WinForm() form.show() sys.exit(app.exec_())

運行效果如圖

python GUI庫圖形界面開發(fā)之PyQt5信號與槽多窗口數(shù)據(jù)傳遞詳細使用方法與實例

多窗口數(shù)據(jù)傳遞:調(diào)用屬性

新建對話框子窗口屬性,我這里的名字為: jia_13多窗口數(shù)據(jù)傳遞之調(diào)用屬性

from PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5.QtWidgets import *class DateDialog(QDialog): def __init__(self,parent=None): super(DateDialog, self).__init__(parent) self.setWindowTitle(’DateDialog’) #在布局中添加控件 layout=QVBoxLayout(self) self.datetime=QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) buttons=QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel,Qt.Horizontal,self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) def dateTime( self ): return self.datetime.dateTime() @staticmethod def getDateTime(parent=None): dialog=DateDialog(parent) result=dialog.exec_() date=dialog.dateTime() return (date.date(),date.time(),result==QDialog.Accepted)

再新建一個主窗口文件,用來調(diào)用上一個子窗口

import sysfrom PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5.QtWidgets import *from jia_13多窗口數(shù)據(jù)傳遞之調(diào)用屬性 import DateDialogclass WinForm(QWidget): def __init__(self,parent=None): super(WinForm, self).__init__(parent) self.resize(400,90) self.setWindowTitle(’對話框關閉時返回值給主窗口的例子’) self.lineEdit=QLineEdit(self) self.button1=QPushButton(’彈出對話框1’) self.button1.clicked.connect(self.onButton1Clicked) self.button2=QPushButton(’彈出對話框2’) self.button2.clicked.connect(self.onButton2Clicked) gridLayout=QGridLayout(self) gridLayout.addWidget(self.lineEdit) gridLayout.addWidget(self.button1) gridLayout.addWidget(self.button2) def onButton1Clicked( self ): dialog=DateDialog(self) result=dialog.exec_() date=dialog.dateTime() self.lineEdit.setText(date.date().toString()) print(’n日期對話框的返回值’) print(’date=%s’%str(date.date)) print(’time=%s’%str(date.time())) print(’result=%s’%result) def onButton2Clicked( self ): date,time,result=DateDialog.getDateTime() self.lineEdit.setText(date.toString()) print(’n 日期對話框的返回值’) print(’date=%s’ %str(date)) print(’time=%s’ %str(time)) print(’result=%s’ %result)if __name__ == ’__main__’: app=QApplication(sys.argv) form=WinForm() form.show() sys.exit(app.exec_())

運行程序,顯示如圖

python GUI庫圖形界面開發(fā)之PyQt5信號與槽多窗口數(shù)據(jù)傳遞詳細使用方法與實例

代碼分析

在主窗口調(diào)用對話框有兩種方法,本例中,這兩種方法操作效果是一樣的,都需要點擊彈出對話框按鈕,在對話框的時間日期控件中選擇日期,則會把選中的日期返回到主窗口的lineTeXt文本控件中

第一中方法:直接在主窗口程序中實例化該對話框,然后調(diào)用該對話框的函數(shù),來獲取返回值,根據(jù)對話框的返回值單擊確認按鈕還是取消按鈕來進行下一步的操作,同理,對于上面的DateDialog,主窗口程序代碼如下

 def onButton1Clicked( self ):

        dialog=DateDialog(self)

        result=dialog.exec_()

        date=dialog.dateTime()

        self.lineEdit.setText(date.date().toString())

第二種方法:在主窗口程序中調(diào)用子窗口的靜態(tài)函數(shù),實際上這種方法與第一種方法是一樣的,只不過他利用靜態(tài)函數(shù)的特點,在子窗口的靜態(tài)函數(shù)中的創(chuàng)建實例化對象

 def onButton2Clicked( self ):

        date,time,result=DateDialog.getDateTime()

        self.lineEdit.setText(date.toString())

多窗口數(shù)據(jù)傳遞信號與槽實例

對于多窗口的數(shù)據(jù)傳遞,一般是通過子窗口發(fā)射信號的,主窗口通過槽函數(shù)捕獲這個信號,然后獲取信號里面的數(shù)據(jù),子窗口發(fā)射的信號有兩種:一種是發(fā)射內(nèi)置pyqt信號,一種是發(fā)射自定義的信號

發(fā)射自定義的信號,好處是它的參數(shù)可以自定義,可以為int list dict等各種類型與多個參數(shù)

新建一個子對話框文件,這里的名稱為:jia_14多窗口信號傳遞之信號與槽

# -*- coding: utf-8 -*-from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class DateDialog(QDialog): Signal_OneParameter = pyqtSignal(str) def __init__(self, parent=None): super(DateDialog, self).__init__(parent) self.setWindowTitle(’子窗口:用來發(fā)射信號’) # 在布局中添加部件 layout = QVBoxLayout(self) self.label = QLabel(self) self.label.setText(’前者發(fā)射內(nèi)置信號n后者發(fā)射自定義信號’) self.datetime_inner = QDateTimeEdit(self) self.datetime_inner.setCalendarPopup(True) self.datetime_inner.setDateTime(QDateTime.currentDateTime()) self.datetime_emit = QDateTimeEdit(self) self.datetime_emit.setCalendarPopup(True) self.datetime_emit.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.label) layout.addWidget(self.datetime_inner) layout.addWidget(self.datetime_emit) # 使用兩個button(ok和cancel)分別連接accept()和reject()槽函數(shù) buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) self.datetime_emit.dateTimeChanged.connect(self.emit_signal) def emit_signal(self): date_str = self.datetime_emit.dateTime().toString() self.Signal_OneParameter.emit(date_str)

創(chuàng)建主窗口,調(diào)用對話框文件

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *from jia_14多窗口信號傳遞之信號與槽 import DateDialogclass WinForm(QWidget): def __init__(self, parent=None): super(WinForm, self).__init__(parent) self.resize(400, 90) self.setWindowTitle(’信號與槽傳遞參數(shù)的示例’) self.open_btn = QPushButton(’獲取時間’) self.lineEdit_inner = QLineEdit(self) self.lineEdit_emit = QLineEdit(self) self.open_btn.clicked.connect(self.openDialog) self.lineEdit_inner.setText(’接收子窗口內(nèi)置信號的時間’) self.lineEdit_emit.setText(’接收子窗口自定義信號的時間’) grid = QGridLayout() grid.addWidget(self.lineEdit_inner) grid.addWidget(self.lineEdit_emit) grid.addWidget(self.open_btn) self.setLayout(grid) def openDialog(self): dialog = DateDialog(self) ’’’連接子窗口的內(nèi)置信號與主窗口的槽函數(shù)’’’ dialog.datetime_inner.dateTimeChanged.connect(self.deal_inner_slot) ’’’連接子窗口的自定義信號與主窗口的槽函數(shù)’’’ dialog.Signal_OneParameter.connect(self.deal_emit_slot) dialog.show() def deal_inner_slot(self, date): self.lineEdit_inner.setText(date.toString()) def deal_emit_slot(self, dateStr): self.lineEdit_emit.setText(dateStr)if __name__ == '__main__': app = QApplication(sys.argv) form = WinForm() form.show() sys.exit(app.exec_())

運行程序,效果如下

python GUI庫圖形界面開發(fā)之PyQt5信號與槽多窗口數(shù)據(jù)傳遞詳細使用方法與實例

代碼分析

下面代碼表示,當空間datetime_emit的時間發(fā)生變化時,就會觸發(fā),子窗口的槽函數(shù)emit_signal,而在這個槽函數(shù)中又會發(fā)射自定義信號Signal_OneParameter,這個信號函數(shù)是為了傳遞date_str參數(shù)給主函數(shù)

    def emit_signal(self):

        date_str = self.datetime_emit.dateTime().toString()

        self.Signal_OneParameter.emit(date_str)

對于主窗口,關鍵是獲取子窗口的信號,并把它綁定在自己的槽函數(shù)上,這樣就實現(xiàn)了子窗口的控件與主窗口控件的綁定,核心代碼如下

  def openDialog(self):

        dialog = DateDialog(self)

        ’’’連接子窗口的內(nèi)置信號與主窗口的槽函數(shù)’’’

        dialog.datetime_inner.dateTimeChanged.connect(self.deal_inner_slot)

        ’’’連接子窗口的自定義信號與主窗口的槽函數(shù)’’’

        dialog.Signal_OneParameter.connect(self.deal_emit_slot)

        dialog.show()

本文主要講解了PyQt5窗口數(shù)據(jù)傳遞與PyQt5信號與槽多窗口數(shù)據(jù)傳遞詳細使用方法與實例,更多關于PyQt5信號與槽的知識請查看下面的相關鏈接

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
丝袜a∨在线一区二区三区不卡| 99久久婷婷这里只有精品| 四虎4545www国产精品| 亚洲人成网站在线在线观看| 亚洲专区在线| 国产农村妇女精品一二区| av中文字幕在线观看第一页| 免费日韩成人| 久久激情综合网| 国产亚洲欧美日韩精品一区二区三区 | 999国产精品视频| 精品免费视频| 精品国产精品久久一区免费式| 欧美精品国产白浆久久久久| 国产三级一区| 国产精品一区二区三区av麻| 最新国产精品久久久| 丝袜美腿高跟呻吟高潮一区| 99re国产精品| 亚洲精品小说| 久久国产精品久久w女人spa| 亚洲欧洲日韩精品在线| 日韩av资源网| 欧美精品91| 丝袜美腿诱惑一区二区三区| 自拍日韩欧美| 日韩三级一区| 久久久免费人体| 日本在线啊啊| 午夜日韩在线| 日韩一区二区三区高清在线观看| 欧美日本精品| 日本一区二区免费高清| 久久狠狠婷婷| 亚洲一区二区小说| 国产亚洲精品美女久久| 国产一区一一区高清不卡| 久久久久中文| 日韩一区中文| 国产一区二区三区久久久久久久久| 日韩一区二区在线免费| 国产亚洲福利| 国产欧美日韩精品高清二区综合区 | 国产精品老牛| 欧美欧美黄在线二区| 国产一区二区三区国产精品| 99精品视频在线| 亚洲人成在线影院| 精品三级在线| 国产视频一区在线观看一区免费| 国产麻豆一区二区三区精品视频| 国产高潮在线| 亚洲香蕉视频| 日韩理论片av| 日韩av电影一区| 亚洲精品一区三区三区在线观看| 蜜臀91精品一区二区三区| 91欧美极品| 特黄特色欧美大片| 欧美一区自拍| 久久精品主播| 国产亚洲一区| 国产亚洲精品自拍| 日韩成人精品一区| 日韩在线麻豆| 国产超碰精品| 国产精品视频首页| 波多野结衣一区| 日本精品另类| 99久久精品国产亚洲精品| 中文无码久久精品| 久久影院资源站| 在线天堂中文资源最新版| 亚洲精品一级| 四虎8848精品成人免费网站| 亚洲一级在线| 精品女同一区二区三区在线观看| 99香蕉国产精品偷在线观看| 国产精品一区二区三区美女| 99热精品久久| 欧美日韩亚洲一区在线观看| 日韩av有码| 久久国际精品| 亚洲v在线看| 日本不卡视频一二三区| 在线天堂中文资源最新版| 免费在线观看视频一区| 国产精品美女午夜爽爽| 色爱av综合网| 国产午夜一区| 欧美精品黄色| 欧美激情 亚洲a∨综合| 蜜桃伊人久久| 亚洲天堂资源| 日韩av一二三| 国产精品97| 精品美女在线视频| 美女国产一区| av资源中文在线| 三级久久三级久久久| 超碰99在线| 性欧美长视频| 日韩在线观看不卡| 欧美精品三级在线| 亚洲精品午夜av福利久久蜜桃| 国产麻豆一区二区三区精品视频| 欧美~级网站不卡| 狂野欧美性猛交xxxx| 亚洲一区导航| 亚洲欧美伊人| 成午夜精品一区二区三区软件| 亚洲深深色噜噜狠狠爱网站| 国产99亚洲| 日本一二区不卡| 国产美女久久| 日韩在线黄色| 国产精品腿扒开做爽爽爽挤奶网站| 国产激情欧美| 亚洲日本三级| 五月婷婷六月综合| 国产精品久久久久久模特| 美女久久一区| 久久精品动漫| 精品三级国产| 久久精品999| 亚洲深深色噜噜狠狠爱网站 | 国产精品nxnn| 亚洲精品美女91| 老鸭窝毛片一区二区三区| 亚洲天堂一区二区| 国产人成精品一区二区三| 免费在线观看一区| 久久久精品区| 欧美91福利在线观看| 国产成人免费av一区二区午夜| 久久国产欧美| 视频一区二区不卡| 国产亚洲高清一区| 激情久久五月| 蜜桃视频在线网站| 日韩免费av| 久久精品国产亚洲夜色av网站| 日韩精品免费视频人成| 免费看的黄色欧美网站| 在线综合亚洲| 日韩电影在线视频| 亚洲va久久久噜噜噜久久| 影音国产精品| 欧美另类综合| 91久久久精品国产| 不卡在线一区| 午夜在线一区二区| 中文字幕一区二区三区日韩精品 | 欧美丰满日韩| 国产精品激情| 日韩二区三区四区| 国产一区二区久久久久| 综合精品一区| 精品三级在线| 99精品在线观看| 国产欧美日韩精品高清二区综合区| 精品理论电影在线| 国产无遮挡裸体免费久久| 91麻豆精品激情在线观看最新 | 视频精品一区二区| 日韩国产专区| 色一区二区三区四区| 九九综合在线| 精品视频一区二区三区四区五区| 丝袜美腿一区| 日韩欧美一区二区三区在线观看| 蜜臀久久99精品久久一区二区| 69堂免费精品视频在线播放| 精品亚洲自拍| 精品久久精品| 六月婷婷综合| 99久久婷婷| 超碰超碰人人人人精品| 中文在线免费视频| 丁香婷婷久久| 视频福利一区| 亚洲成人一区| 亚洲一区久久| 日韩一区二区三区在线看| 国产一区二区三区自拍| 精品视频一二| 免费一级片91| 日韩一区二区三区免费播放| 午夜国产精品视频| 亚洲午夜国产成人| 日本亚洲最大的色成网站www | 亚洲乱码久久| 亚洲精品乱码| 国产剧情一区二区在线观看| 99久久亚洲精品蜜臀| 久久精品国产亚洲一区二区三区| 久久99视频| 日韩av中文字幕一区二区三区| 欧美手机在线| 日本中文字幕视频一区|