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

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

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

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

在pyqt5編程過程中,經常會遇到輸入或選擇多個參數的問題,把多個參數寫到一個窗口中,主窗口會顯得很臃腫,所以,一般是添加一個按鈕,調用對話框,在對話框中進行參數的選擇,關閉對話框將參數返回給主窗口

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

單一窗口的數據傳遞實例

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

import sysfrom PyQt5.QtWidgets import *from PyQt5.QtCore import *class WinForm(QWidget): def __init__(self): super(WinForm, self).__init__() self.initUI() def initUI( self ): #先創建水平滑塊和Lcd控件 lcd=QLCDNumber(self) slider=QSlider(Qt.Horizontal,self) #垂直布局,添加控件 vbox=QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(slider) #設置窗口布局 self.setLayout(vbox) #設置滑塊數值信號改變連接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庫圖形界面開發之PyQt5信號與槽多窗口數據傳遞詳細使用方法與實例

多窗口數據傳遞:調用屬性

新建對話框子窗口屬性,我這里的名字為: jia_13多窗口數據傳遞之調用屬性

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)

再新建一個主窗口文件,用來調用上一個子窗口

import sysfrom PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5.QtWidgets import *from jia_13多窗口數據傳遞之調用屬性 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庫圖形界面開發之PyQt5信號與槽多窗口數據傳遞詳細使用方法與實例

代碼分析

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

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

 def onButton1Clicked( self ):

        dialog=DateDialog(self)

        result=dialog.exec_()

        date=dialog.dateTime()

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

第二種方法:在主窗口程序中調用子窗口的靜態函數,實際上這種方法與第一種方法是一樣的,只不過他利用靜態函數的特點,在子窗口的靜態函數中的創建實例化對象

 def onButton2Clicked( self ):

        date,time,result=DateDialog.getDateTime()

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

多窗口數據傳遞信號與槽實例

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

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

新建一個子對話框文件,這里的名稱為: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(’子窗口:用來發射信號’) # 在布局中添加部件 layout = QVBoxLayout(self) self.label = QLabel(self) self.label.setText(’前者發射內置信號n后者發射自定義信號’) 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()槽函數 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)

創建主窗口,調用對話框文件

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(’信號與槽傳遞參數的示例’) 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(’接收子窗口內置信號的時間’) 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) ’’’連接子窗口的內置信號與主窗口的槽函數’’’ dialog.datetime_inner.dateTimeChanged.connect(self.deal_inner_slot) ’’’連接子窗口的自定義信號與主窗口的槽函數’’’ 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庫圖形界面開發之PyQt5信號與槽多窗口數據傳遞詳細使用方法與實例

代碼分析

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

    def emit_signal(self):

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

        self.Signal_OneParameter.emit(date_str)

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

  def openDialog(self):

        dialog = DateDialog(self)

        ’’’連接子窗口的內置信號與主窗口的槽函數’’’

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

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

        dialog.Signal_OneParameter.connect(self.deal_emit_slot)

        dialog.show()

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

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品国产| 欧美精品九九| 国产99精品一区| 亚洲国产福利| 成人精品高清在线视频| 国产精品美女午夜爽爽| 日本成人中文字幕| 日韩欧美久久| 91欧美精品| 日韩成人精品一区二区三区 | 日本不卡高清视频| 少妇高潮一区二区三区99| 亚洲欧美久久精品| 亚洲日本在线观看视频| 美女精品在线观看| 日本国产欧美| 日韩av电影一区| 国产精品伊人| 高清一区二区三区av| zzzwww在线看片免费| 深夜视频一区二区| 欧美特黄视频| 最新国产精品| 欧美精品99| 精品一区电影| 激情综合自拍| 国产精品日韩欧美一区| 亚洲性视频在线| 国产乱论精品| 欧美成人精品三级网站| 亚洲欧洲另类| 亚洲91网站| 国产精成人品2018| 精品久久91| 午夜国产精品视频| 日韩 欧美一区二区三区| 国产精品va视频| 亚洲美女久久精品| 国产精品美女久久久浪潮软件| 中文字幕日韩亚洲| 精品中文在线| 一区免费在线| 青青青国产精品| 国产伦久视频在线观看| 在线视频精品| 国产精品乱战久久久| 国产精品国产一区| 国产亚洲亚洲| 美女视频黄 久久| 欧美在线资源| 国产欧美日韩一区二区三区在线| 国产成人精选| 日韩中文欧美在线| 国产精品高潮呻吟久久久久| 91精品一区二区三区综合| 综合欧美精品| 水蜜桃精品av一区二区| 久久亚洲电影| 欧美国产一级| 亚洲精品黄色| 少妇精品导航| 日韩 欧美一区二区三区| 亚洲国产欧美日本视频| 亚洲视频电影在线| 日本黄色精品| 视频一区日韩| 亚洲成av在线| 国产亚洲精aa在线看| 亚洲高清激情| 麻豆国产91在线播放| 亚洲一区中文| 国产理论在线| 国产一区 二区| 日韩一级不卡| 久久久男人天堂| 日本麻豆一区二区三区视频| 久久伊人久久| 亚洲午夜免费| 久久国产日本精品| 国产黄色精品| 亚洲麻豆一区| 99精品综合| 久久99蜜桃| 婷婷五月色综合香五月| 1000部精品久久久久久久久| 久久国产精品美女| 中文字幕亚洲精品乱码| 99久久亚洲精品蜜臀| 国产剧情一区二区在线观看| 麻豆91精品| 欧美中文一区二区| 久久亚洲资源中文字| 婷婷成人av| 免费久久99精品国产自在现线| 欧美日韩国产v| 国产日韩欧美一区二区三区| 伊人久久亚洲美女图片| 福利在线免费视频| 欧美激情aⅴ一区二区三区 | 免费视频最近日韩| 99久久激情| yellow在线观看网址| 国产精品视频一区二区三区综合| 香蕉精品999视频一区二区| 色一区二区三区四区| 国产精品巨作av| 人人爱人人干婷婷丁香亚洲| 蜜桃视频在线观看一区二区| 欧美成人国产| 色婷婷久久久| 欧美亚洲日本精品| 精品视频一区二区三区在线观看 | 国精品一区二区三区| 中文字幕高清在线播放| 麻豆精品视频在线| 国产精品一区二区99| 日韩高清在线不卡| 日韩黄色免费网站| 日韩欧美四区| 日韩中文字幕在线一区| 免费在线欧美视频| 亚洲成人免费| 欧美日韩在线播放视频| 欧美日韩视频网站| 色一区二区三区| 久久精品国产999大香线蕉| 国产亚洲高清在线观看| 欧美一区影院| 国产精品久久777777毛茸茸| 欧美在线看片| 国产乱码精品一区二区三区亚洲人| 日韩福利视频网| 日韩av三区| 国产精品天堂蜜av在线播放| 国产精品亚洲二区| 久久中文字幕导航| 在线看片国产福利你懂的| 亚洲va中文在线播放免费| 成人精品亚洲| 欧美粗暴jizz性欧美20| 999精品色在线播放| 不卡视频在线| 一本一本久久| 亚洲精品一二| 国产伦精品一区二区三区千人斩| 国产欧美日韩一区二区三区在线| 国产精品日本一区二区不卡视频 | 久久精品九色| 91嫩草亚洲精品| 九九精品调教| 日韩亚洲精品在线| 亚洲男人在线| 国产精品资源| 国产欧洲在线| 在线精品小视频| 欧美精品影院| 中文字幕人成乱码在线观看| 亚洲精品1区2区| 国产乱码精品一区二区三区亚洲人| 国产66精品| 亚洲免费影视| 国产精品chinese| 亚洲永久av| 老司机久久99久久精品播放免费| 国产精品视频一区视频二区| 国产精品亚洲一区二区三区在线观看| 亚洲一区国产| 麻豆成人av在线| 一区在线免费观看| 欧美日韩调教| 青青久久av| 日韩av中文字幕一区二区三区| 精品美女视频| 久久久久国产精品一区二区| caoporn视频在线| 日韩视频在线一区二区三区| 国产精品日韩精品中文字幕| 久久婷婷av| 蜜桃久久av| 国产一区二区精品久| 日韩不卡在线| 91九色综合| 麻豆理论在线观看| 国产视频一区免费看| 欧美影院视频| 午夜久久黄色| 欧美日韩伊人| 91视频精品| 男女激情视频一区| 神马久久午夜| 亚洲精品伦理| 国产成人久久精品麻豆二区| 久久香蕉网站| 男人的天堂久久精品| 久久超级碰碰| 亚洲一级影院| 在线精品视频一区| 日韩精品影视| 欧美伊人久久| 亚洲大片在线|