欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

 更新時間:2020年02月25日 15:46:44   作者:追逐陽光的風(fēng)  
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制基礎(chǔ)介紹,需要的朋友可以參考下

信號和槽機(jī)制是 QT 的核心機(jī)制,要精通 QT 編程就必須對信號和槽有所了解。信號和槽是一種高級接口,應(yīng)用于對象之間的通信,它是 QT 的核心特性,也是 QT 區(qū)別于其它工具包的重要地方。

在linux、windows等 GUI 工具包中,GUI組件都會注冊回調(diào)函數(shù)用于處理組件所觸發(fā)的動作,通常是注冊對應(yīng)的函數(shù)的函數(shù)指針。在之前關(guān)于Button的文章中提到了信號與槽的機(jī)制的使用,通過該機(jī)制可以很好的將組件的信號(如button的clocked、toggled、pressed等)和處理該信號的槽關(guān)聯(lián)起來。通過 信號與槽機(jī)制,能夠讓我們很簡潔和快速的來完成相關(guān)的功能。

信號和槽是用來在對象間傳遞數(shù)據(jù)的方法:當(dāng)一個特定事件發(fā)生的時候,signal會被emit出來,slot調(diào)用是用來響應(yīng)相應(yīng)的signal的。Qt中對象已經(jīng)包含了許多預(yù)定義的 signal(基本組件都有各自特有的預(yù)定義的信號),根據(jù)使用的場景我們可以添加新的signal。Qt的對象中已經(jīng)包含了許多預(yù)定義的槽函數(shù),但我們也根據(jù)使用的場景添加新的槽函數(shù)。

信號

當(dāng)對象的狀態(tài)發(fā)生改變的時候,信號就由該對象發(fā)射 (emit) 出去。當(dāng)一個信號被發(fā)射(emit)時候,與其關(guān)聯(lián)的槽函數(shù)被立刻執(zhí)行。其中該對象只負(fù)責(zé)發(fā)送信號,發(fā)射該信號的對象并不知道是那個對象在接收這個信號。這樣保證了對象與對象之間的低耦合。

如果存在信號和多個槽函數(shù)相關(guān)聯(lián)的時候,當(dāng)信號被發(fā)射時,這些槽的執(zhí)行順序?qū)请S機(jī)的、不確定的。

用于接受信號,而且槽只是普通的對象成員函數(shù)。當(dāng)和槽連接的信號被發(fā)射時,槽會被調(diào)用。一個槽并不知道是否有任何信號與自己相連接。

信號和槽的綁定

通過調(diào)用 QObject 對象的 connect 函數(shù)來將某個對象的信號與另外一個對象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號時,接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下::

connect(slot[, type=PyQt5.QtCore.Qt.AutoConnection[, no_receiver_check=False]])

Parameters: 

slot – the slot to connect to, either a Python callable or another bound signal.

type – the type of the connection to make.

no_receiver_check – suppress the check that the underlying C++ receiver instance still exists and deliver the signal anyway.

當(dāng)信號與槽沒有必要繼續(xù)保持關(guān)聯(lián)時,我們可以使用 disconnect 函數(shù)來斷開連接。其定義如下:

disconnect([slot])

Parameters: slot – the optional slot to disconnect from, either a Python callable or another bound signal. If it is omitted then all slots connected to the signal are disconnected.

信號和槽的特點(diǎn)

1、一個信號可以連接到多個槽;

當(dāng)信號發(fā)出后,槽函數(shù)都會被調(diào)用,但是調(diào)用的順序是隨機(jī)的,不確定的。

self.slider.valueChanged.connect(self.pBar.setValue) 

self.slider.valueChanged.connect(self.lcdNumber.display)

QSlider數(shù)據(jù)的變化同時綁定在setValue()和display()兩個槽上。

2、多個信號可以連接到同一個槽;

其中任何一個信號發(fā)出,槽函數(shù)都會被執(zhí)行。

self.buttonOn.clicked.connect(self.showMessage)

self.buttonOff.clicked.connect(self.showMessage)

showMessage()同時綁定在兩個button的clicked信號上

3、信號的參數(shù)可以是任何的Python類型;

如list,dict等python獨(dú)有的類型。自定義信號的時候舉例說明。

4、信號和槽的連接可以被移除;

比如斷開某個特定信號的關(guān)聯(lián)。

self.buttonOn.clicked.connect(self.showMessage)

5、信號可以和另外一個信號進(jìn)行關(guān)聯(lián);

第一個信號發(fā)出后,第二個信號也同時發(fā)送。比如關(guān)閉系統(tǒng)的信號發(fā)出之后,同時會發(fā)出保存數(shù)據(jù)的信號。

代碼示例:

關(guān)于信號和槽的式樣代碼如下:

#-*- coding:utf-8 -*-
'''
Signal & Slot
'''
__author__ = 'Tony Zhu'

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,QGridLayout,QLabel,QHBoxLayout, QGroupBox,
  QVBoxLayout, QApplication,QProgressBar,QPushButton,QMessageBox)


class SignalSlot(QWidget):

  def __init__(self):
    super(SignalSlot,self).__init__()   
    self.initUI()


  def initUI(self):

    self.controlsGroup = QGroupBox("運(yùn)行樣本")
    self.lcdNumber = QLCDNumber(self)
    self.slider = QSlider(Qt.Horizontal, self)
    self.pBar = QProgressBar(self)
    vbox = QVBoxLayout()
    vbox.addWidget(self.pBar)
    vbox.addWidget(self.lcdNumber)
    vbox.addWidget(self.slider)
    self.controlsGroup.setLayout(vbox)

    controlsLayout = QGridLayout()
    self.label1 = QLabel("保存狀態(tài):")
    self.saveLabel = QLabel()
    self.label2 = QLabel("運(yùn)行狀態(tài):")
    self.runLabel = QLabel()
    self.buttonSave = QPushButton("保存")
    self.buttonRun = QPushButton("運(yùn)行")
    self.buttonStop = QPushButton("停止")
    self.buttonDisconnect = QPushButton("解除關(guān)聯(lián)")
    self.buttonConnect = QPushButton("綁定關(guān)聯(lián)")

    controlsLayout.addWidget(self.label1,0,0)
    controlsLayout.addWidget(self.saveLabel,0,1)
    controlsLayout.addWidget(self.label2,1,0)
    controlsLayout.addWidget(self.runLabel,1,1)
    controlsLayout.addWidget(self.buttonSave,2,0)
    controlsLayout.addWidget(self.buttonRun,2,1)
    controlsLayout.addWidget(self.buttonStop,2,2)
    controlsLayout.addWidget(self.buttonDisconnect,3,0)
    controlsLayout.addWidget(self.buttonConnect,3,1)

    layout = QHBoxLayout()
    layout.addWidget(self.controlsGroup)
    layout.addLayout(controlsLayout)
    self.setLayout(layout)

    self.buttonRun.clicked.connect(self.buttonSave.clicked)
    self.slider.valueChanged.connect(self.pBar.setValue)
    self.slider.valueChanged.connect(self.lcdNumber.display)
    self.buttonSave.clicked.connect(self.showMessage)
    self.buttonRun.clicked.connect(self.showMessage)
    self.buttonDisconnect.clicked.connect(self.unbindConnection)
    self.buttonConnect.clicked.connect(self.bindConnection)
    self.buttonStop.clicked.connect(self.stop)

    self.setGeometry(300, 500, 500, 180)
    self.setWindowTitle('信號和槽')

  def showMessage(self):
    if self.sender().text() == "保存":
      self.saveLabel.setText("Saved")
    elif self.sender().text() == "運(yùn)行":
      self.saveLabel.setText("Saved")
      self.runLabel.setText("Running")

  def unbindConnection(self):
    self.slider.valueChanged.disconnect()
  def bindConnection(self):
    self.slider.valueChanged.connect(self.pBar.setValue)
    self.slider.valueChanged.connect(self.lcdNumber.display)
  def stop(self):
    self.saveLabel.setText("")
    self.runLabel.setText("")

if __name__ == '__main__':

  app = QApplication(sys.argv)
  ex = SignalSlot()
  ex.show()
  sys.exit(app.exec_())

程序運(yùn)行的結(jié)果:

控件說明:

控件類型 控件名稱 作用
QLCDNumber lcdNumber 顯示slider滑動之后的數(shù)據(jù)
QProgressBar pBar 顯示slider滑動之后的數(shù)據(jù)(百分比數(shù)據(jù))
QSlider slider 滑動塊調(diào)整數(shù)據(jù)
QPushButton buttonSave 在saveLabel顯示保存的狀態(tài)”Saved”
QPushButton buttonRun 在runLabel顯示運(yùn)行的狀態(tài)”Running”
QPushButton buttonDisconnect 解除slider.valueChanged信號的綁定
QPushButton buttonConnect 連接slider.valueChanged信號的綁定
QPushButton buttonStop 清除saveLabel和runLabel的信息

示例說明:

程序樣本運(yùn)行的界面邏輯,先設(shè)定運(yùn)行的程序樣本數(shù)量,然后先保存后運(yùn)行的邏輯狀態(tài)。通過slider的滑動來改變progressBar和LCD的顯示數(shù)據(jù);“保存”按鈕保存運(yùn)行的樣本;“運(yùn)行”按鈕運(yùn)行程序樣本;“解除關(guān)聯(lián)”解除slider.valueChanged信號的綁定,此時slider的滑動,不會改變progressBar和LCD的顯示

示例說明:

L22~30:

self.controlsGroup = QGroupBox("運(yùn)行樣本")
self.lcdNumber = QLCDNumber(self)
self.slider = QSlider(Qt.Horizontal, self)
self.pBar = QProgressBar(self)
vbox = QVBoxLayout()
vbox.addWidget(self.pBar)
vbox.addWidget(self.lcdNumber)
vbox.addWidget(self.slider)
self.controlsGroup.setLayout(vbox)

實(shí)例化一個QGroupBox,在其中添加QSlider,QProgressBar,QLCDNumber控件。

L32~41:

controlsLayout = QGridLayout()
self.label1 = QLabel("保存狀態(tài):")

.....

self.buttonDisconnect = QPushButton("解除關(guān)聯(lián)")
self.buttonConnect = QPushButton("綁定關(guān)聯(lián)")

實(shí)例化,界面中右半部分的控件。

L58~65:

self.buttonRun.clicked.connect(self.buttonSave.clicked)
self.slider.valueChanged.connect(self.pBar.setValue)
self.slider.valueChanged.connect(self.lcdNumber.display)
self.buttonSave.clicked.connect(self.showMessage)
self.buttonRun.clicked.connect(self.showMessage)
self.buttonDisconnect.clicked.connect(self.unbindConnection)
self.buttonConnect.clicked.connect(self.bindConnection)
self.buttonStop.clicked.connect(self.stop)

signal和slot進(jìn)行綁定。

1、一個信號綁定多個槽:

self.slider.valueChanged.connect(self.pBar.setValue)

self.slider.valueChanged.connect(self.lcdNumber.display)

slider控件的valueChanged信號,同時與QProgressBar的setValue(),QLCDNumber的display()槽函數(shù)綁定,當(dāng)valueChanged信號觸發(fā)的時候,這兩個槽函數(shù)均會被調(diào)用。

2、多個信號綁定到一個槽:

self.buttonSave.clicked.connect(self.showMessage)

self.buttonRun.clicked.connect(self.showMessage)

buttonSave和buttonRun這兩個對象的clicked信號,同時綁定到showMessage()這個槽函數(shù)。無論哪一個信號被觸發(fā),showMessage()這個槽函數(shù)均會被調(diào)用。

3、信號和槽的連接可以被移除:

self.buttonDisconnect.clicked.connect(self.unbindConnection)

當(dāng)buttonDisconnect信號觸發(fā)之后,與其關(guān)聯(lián)的槽函數(shù)unbindConnection()中就會執(zhí)行disconnect()方法,如下:

def unbindConnection(self):
self.slider.valueChanged.disconnect()

其中執(zhí)行disconnect()的時候可以指定解除與某個特定的slot槽的關(guān)聯(lián),比如self.slider.valueChanged.disconnect(self.pBar.setValue),此時解除和QProgressBar的setValue()的關(guān)聯(lián);或者不指定,在不指定slot的場景下這樣將解除和這個信號所有關(guān)聯(lián)的槽。

4、信號與信號的關(guān)聯(lián):

self.buttonRun.clicked.connect(self.buttonSave.clicked)

在示例說明中提到,在運(yùn)行之前要對樣本進(jìn)行保存,所以為了保證運(yùn)行的時候執(zhí)行了保存的操作,所以將buttonRun.clicked信號和buttonSave.clicked信號關(guān)聯(lián)起來。

示例中在沒有執(zhí)行“保存”(buttonSave)的時候,執(zhí)行“運(yùn)行”(buttonRun),此時由于兩個對象的clicked信號已經(jīng)關(guān)聯(lián),所以buttonSave的clicked同樣會執(zhí)行。

PyQt5自定義信號

PyQt5已經(jīng)自動定義了很多QT內(nèi)建的信號。但是在實(shí)際的使用中為了靈活使用信號與槽機(jī)制,我們可以根據(jù)需要自定義signal??梢允褂胮yqtSignal()方法定義新的信號,新的信號作為類的屬性。

自定義signal說明:

pyqtSignal()方法原型(PyQt官網(wǎng)的定義):

PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]])

Create one or more overloaded unbound signals as a class attribute.

Parameters: 

types – the types that define the C++ signature of the signal. Each type may be a Python type object or a string that is the name of a C++ type. Alternatively each may be a sequence of type arguments. In this case each sequence defines the signature of a different signal overload. The first overload will be the default.

name – the name of the signal. If it is omitted then the name of the class attribute is used. This may only be given as a keyword argument.

revision – the revision of the signal that is exported to QML. This may only be given as a keyword argument.

arguments – the sequence of the names of the signal's arguments that is exported to QML. This may only be given as a keyword argument.

Return type:    an unbound signal

新的信號應(yīng)該定義在QObject的子類中。新的信號必須作為定義類的一部分,不允許將信號作為類的屬性在類定義之后通過動態(tài)的方式進(jìn)行添加。通過這種方式新的信號才能自動的添加到QMetaObject類中。這就意味這新定義的信號將會出現(xiàn)在Qt Designer,并且可以通過QMetaObject API實(shí)現(xiàn)內(nèi)省。

通過下面的例子,了解一下關(guān)于signal的定義:

from PyQt5.QtCore import QObject, pyqtSignal

class NewSignal(QObject):

  # 定義了一個“closed”信號,該信號沒有參數(shù)據(jù)
  closed= pyqtSignal()

  # 定義了一個"range_changed"信號,該信號有兩個int類型的參數(shù)
  range_changed = pyqtSignal(int, int, name='rangeChanged')

自定義信號的發(fā)射,通過emit()方法類實(shí)現(xiàn),具體參見該函數(shù)的原型:

emit(*args)

Parameters: args – the optional sequence of arguments to pass to any connected slots.

通過下面的例子,了解一下關(guān)于emit()的使用:

from PyQt5.QtCore import QObject, pyqtSignal

class NewSignal(QObject):

  # 一個valueChanged的信號,該信號沒有參數(shù).
  valueChanged = pyqtSignal()

  def connect_and_emit_valueChanged(self):
    # 綁定信號和槽函數(shù)
    self.valueChanged.connect(self.handle_valueChanged)

    # 發(fā)射信號.
    self.trigger.emit()

  def handle_valueChanged(self):
    print("trigger signal received")

示例說明:

自定義信號的一般流程如下:

  1. 定義信號
  2. 定義槽函數(shù)
  3. 綁定信號和槽
  4. 發(fā)射信號

通過代碼示例來了解一下信號的自定義過程:

#-*- coding:utf-8 -*-
'''
defined Signal
'''
__author__ = 'Tony Zhu'
import sys
from PyQt5.QtCore import pyqtSignal, QObject, Qt, pyqtSlot
from PyQt5.QtWidgets import QWidget, QApplication, QGroupBox, QPushButton, QLabel, QCheckBox, QSpinBox, QHBoxLayout, QComboBox, QGridLayout


class SignalEmit(QWidget):
  helpSignal = pyqtSignal(str)
  printSignal = pyqtSignal(list)
  #聲明一個多重載版本的信號,包括了一個帶int和str類型參數(shù)的信號,以及帶str參數(shù)的信號
  previewSignal = pyqtSignal([int,str],[str])
  def __init__(self):
    super().__init__()    
    self.initUI()


  def initUI(self):      

    self.creatContorls("打印控制:")
    self.creatResult("操作結(jié)果:")

    layout = QHBoxLayout()
    layout.addWidget(self.controlsGroup)
    layout.addWidget(self.resultGroup)
    self.setLayout(layout)

    self.helpSignal.connect(self.showHelpMessage)
    self.printSignal.connect(self.printPaper)
    self.previewSignal[str].connect(self.previewPaper)
    self.previewSignal[int,str].connect(self.previewPaperWithArgs) 
    self.printButton.clicked.connect(self.emitPrintSignal)
    self.previewButton.clicked.connect(self.emitPreviewSignal)

    self.setGeometry(300, 300, 290, 150)
    self.setWindowTitle('defined signal')
    self.show()

  def creatContorls(self,title):
    self.controlsGroup = QGroupBox(title)
    self.printButton = QPushButton("打印")
    self.previewButton = QPushButton("預(yù)覽")
    numberLabel = QLabel("打印份數(shù):")
    pageLabel = QLabel("紙張類型:")
    self.previewStatus = QCheckBox("全屏預(yù)覽")
    self.numberSpinBox = QSpinBox()
    self.numberSpinBox.setRange(1, 100)
    self.styleCombo = QComboBox(self)
    self.styleCombo.addItem("A4")
    self.styleCombo.addItem("A5")

    controlsLayout = QGridLayout()
    controlsLayout.addWidget(numberLabel, 0, 0)
    controlsLayout.addWidget(self.numberSpinBox, 0, 1)
    controlsLayout.addWidget(pageLabel, 0, 2)
    controlsLayout.addWidget(self.styleCombo, 0, 3)
    controlsLayout.addWidget(self.printButton, 0, 4)
    controlsLayout.addWidget(self.previewStatus, 3, 0)
    controlsLayout.addWidget(self.previewButton, 3, 1)
    self.controlsGroup.setLayout(controlsLayout)

  def creatResult(self,title):
    self.resultGroup = QGroupBox(title)
    self.resultLabel = QLabel("")
    layout = QHBoxLayout()
    layout.addWidget(self.resultLabel)
    self.resultGroup.setLayout(layout)

  def emitPreviewSignal(self):
    if self.previewStatus.isChecked() == True:
      self.previewSignal[int,str].emit(1080," Full Screen")
    elif self.previewStatus.isChecked() == False:
      self.previewSignal[str].emit("Preview")

  def emitPrintSignal(self):
    pList = []
    pList.append(self.numberSpinBox.value ())
    pList.append(self.styleCombo.currentText())
    self.printSignal.emit(pList)

  def printPaper(self,list):
    self.resultLabel.setText("Print: "+"份數(shù):"+ str(list[0]) +" 紙張:"+str(list[1]))

  def previewPaperWithArgs(self,style,text):
    self.resultLabel.setText(str(style)+text)

  def previewPaper(self,text):
    self.resultLabel.setText(text)     

  def keyPressEvent(self, event):

    if event.key() == Qt.Key_F1:
      self.helpSignal.emit("help message")

  def showHelpMessage(self,message):
    self.resultLabel.setText(message)
    #self.statusBar().showMessage(message)


if __name__ == '__main__':

  app = QApplication(sys.argv)
  dispatch = SignalEmit()
  sys.exit(app.exec_())

運(yùn)行該函數(shù)之后的效果如下:

示例說明:

通過一個模擬打印的界面來詳細(xì)說明一下關(guān)于信號的自定義,在打印的時候可以設(shè)定打印的分?jǐn)?shù),紙張類型,觸發(fā)“打印”按鈕之后,將執(zhí)行結(jié)果顯示到右側(cè);通過全屏預(yù)覽QCheckBox來選擇是否通過全屏模式進(jìn)行預(yù)覽,將執(zhí)行結(jié)果顯示到右側(cè)。

通過點(diǎn)擊F1快捷鍵,可以顯示helpMessage信息。

代碼分析:

L12~15:

helpSignal = pyqtSignal(str)
printSignal = pyqtSignal(list)
#聲明一個多重載版本的信號,包括了一個帶int和str類型參數(shù)的信號,以及帶str參數(shù)的信號
previewSignal = pyqtSignal([int,str],[str])

通過pyqtSignal()定義了三個信號,helpSignal ,printSignal ,previewSignal 。其中:

  • helpSignal 為str參數(shù)類型的信號;
  • printSignal 為list參數(shù)類型的信號;
  • previewSignal為一個多重載版本的信號,包括了一個帶int和str類型參數(shù)的信號,以及str類行的參數(shù)。

L31~36:

self.helpSignal.connect(self.showHelpMessage)

self.printSignal.connect(self.printPaper)

self.previewSignal[str].connect(self.previewPaper) 

self.previewSignal[int,str].connect(self.previewPaperWithArgs)

self.printButton.clicked.connect(self.emitPrintSignal)

self.previewButton.clicked.connect(self.emitPreviewSignal)

綁定信號和槽;著重說明一下多重載版本的信號的綁定,previewSignal有兩個版本previewSignal(str),previewSignal(int,str)。由于存在兩個版本,從因此在綁定的時候需要顯式的指定信號和槽的綁定關(guān)系。

具體如下:

self.previewSignal[str].connect(self.previewPaper)

self.previewSignal[int,str].connect(self.previewPaperWithArgs)

其中[str]參數(shù)的previewSignal信號綁定previewPaper();[int,str]的previewSignal信號綁定previewPaperWithArgs()

L72~76:

  def emitPreviewSignal(self):
    if self.previewStatus.isChecked() == True:
      self.previewSignal[int,str].emit(1080," Full Screen")
    elif self.previewStatus.isChecked() == False:
      self.previewSignal[str].emit("Preview")

多重載版本的信號的發(fā)射也需要制定對應(yīng)發(fā)射的版本,類似同信號的版定。

L78~82:

  def emitPrintSignal(self):
    pList = []
    pList.append(self.numberSpinBox.value ())
    pList.append(self.styleCombo.currentText())
    self.printSignal.emit(pList)

如代碼中所示,在信號發(fā)射的時候可以傳遞python數(shù)據(jù)類型的參數(shù),在本例中傳遞list類型的參數(shù)pList.

L93~96:

  def keyPressEvent(self, event):
    if event.key() == Qt.Key_F1:
      self.helpSignal.emit("help message")

通過復(fù)寫keyPressEvent()方法,將F1快捷鍵進(jìn)行功能的拓展。在windows的大部分應(yīng)用,我們都會使用一些快捷鍵來快速的完成某些特定的功能。比如F1鍵,會快速調(diào)出幫助界面。那我們就可以復(fù)寫keyPressEvent()方法來模擬發(fā)送所需的信號,來完成我們的對應(yīng)任務(wù).

注意事項(xiàng):

  • 自定義的信號在init()函數(shù)之前定義;
  • 自定義型號可以傳遞,str、int、list、object、float、tuple、dict等很多類型的參數(shù);
  • 注意signal和slot的調(diào)用邏輯,避免signal和slot之間出現(xiàn)死循環(huán)。如在slot方法中繼續(xù)發(fā)射該信號;

更多關(guān)于python GUI庫圖形界面開發(fā)之PyQt5文章請查看下面的相關(guān)鏈接

相關(guān)文章

  • python可視化實(shí)現(xiàn)代碼

    python可視化實(shí)現(xiàn)代碼

    今天小編就為大家分享一篇關(guān)于python可視化實(shí)現(xiàn)代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python pygame實(shí)現(xiàn)2048游戲

    python pygame實(shí)現(xiàn)2048游戲

    這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)2048游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 基于PyQT5制作英雄聯(lián)盟全皮膚下載器

    基于PyQT5制作英雄聯(lián)盟全皮膚下載器

    這篇文章主要介紹了基于PyQt5制作的簡易英雄聯(lián)盟全皮膚下載器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-02-02
  • python 鏡像環(huán)境搭建總結(jié)

    python 鏡像環(huán)境搭建總結(jié)

    這篇文章主要介紹了python 鏡像環(huán)境搭建總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Python?數(shù)據(jù)可視化超詳細(xì)講解折線圖的實(shí)現(xiàn)

    Python?數(shù)據(jù)可視化超詳細(xì)講解折線圖的實(shí)現(xiàn)

    數(shù)據(jù)可以幫助我們描述這個世界、闡釋自己的想法和展示自己的成果,但如果只有單調(diào)乏味的文本和數(shù)字,我們卻往往能難抓住觀眾的眼球。而很多時候,一張漂亮的可視化圖表就足以勝過千言萬語,讓我們來用Python實(shí)現(xiàn)一個可視化的折線圖
    2022-03-03
  • 使用Python腳本生成隨機(jī)IP的簡單方法

    使用Python腳本生成隨機(jī)IP的簡單方法

    這篇文章主要介紹了使用Python腳本生成隨機(jī)IP的簡單方法,并且可以自己設(shè)定IP數(shù)值范圍,需要的朋友可以參考下
    2015-07-07
  • Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充詳解

    Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充詳解

    pandas除了可以drop含有空值的數(shù)據(jù)之外,當(dāng)然也可以用來填充空值,下面這篇文章主要給大家介紹了關(guān)于Python?pandas?DataFrame基礎(chǔ)運(yùn)算及空值填充的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • jupyter閃退怎么辦?jupyter閃退問題的解決

    jupyter閃退怎么辦?jupyter閃退問題的解決

    這篇文章主要介紹了jupyter閃退怎么辦?jupyter閃退問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 解決jupyter notebook啟動后沒有token的坑

    解決jupyter notebook啟動后沒有token的坑

    這篇文章主要介紹了解決jupyter notebook啟動后沒有token的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • PyQt5每天必學(xué)之彈出消息框

    PyQt5每天必學(xué)之彈出消息框

    這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之彈出消息框,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評論