最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt5實現(xiàn)拖放功能

 更新時間:2021年10月28日 17:17:48   作者:輸天半子  
這篇文章主要為大家詳細介紹了PyQt5實現(xiàn)拖放功能,拖放一個按鈕的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

在這節(jié)教程中,我們將探討PyQt5中的拖放操作。

在計算機圖形用戶界面(GUI)中,拖放是在某個虛擬對象上點擊并拖動到另一個位置或虛擬對象上的操作。它通常用于調用多個動作,或為兩個抽象對象創(chuàng)建某些聯(lián)系。

拖放是圖形用戶界面的一部分。拖放可以使用戶直觀地完成某些復雜的操作。

通常我們可以對兩種事物進行拖放操作:數(shù)據(jù)或某些圖形對象。如果我們將某個應用中的圖片拖放到另一個應用,我們拖放的是二進制數(shù)據(jù)。如果將Firefox的某個標簽頁拖放到其他地方,我們拖放的是一個圖形組件。

簡單的拖放

在第一個示例中我們要創(chuàng)建一個QLineEdit和一個QPushButton,并通過將LineEdit中的文本拖放到按鈕上來改變按鈕的標簽。

import sys
from PyQt5.QtWidgets import (QPushButton, QWidget, QLineEdit, QApplication)


class Button(QPushButton):
 def __init__(self, title, parent):
  super().__init__(title, parent)
  self.setAcceptDrops(True)

 def dragEnterEvent(self, e):
  if e.mimeData().hasFormat("text/plain"):
   e.accept()
  else:
   e.ignore()

 def dropEvent(self, e):
  self.setText(e.mimeData().text())


class Example(QWidget):
 def __init__(self):
  super().__init__()
  self.initUI()

 def initUI(self):
  edit = QLineEdit("", self)
  edit.setDragEnabled(True)
  edit.move(30, 65)

  button = Button("Button", self)
  button.move(190, 65)

  self.setWindowTitle("Simple drag & drop")
  self.setGeometry(300, 300, 300, 150)
  self.show()


if __name__ == "__main__":
 app = QApplication(sys.argv)
 ex = Example()
 sys.exit(app.exec_())

這個示例演示了一個簡單的拖放操作。

class Button(QPushButton):

 def __init__(self, title, parent):
  super().__init__(title, parent)

  self.setAcceptDrops(True)

我們需要重新實現(xiàn)某些方法才能使QPushButton接受拖放操作。因此我們創(chuàng)建了繼承自QPushButton的Button類。

self.setAcceptDrops(True)

使該控件接受drop(放下)事件。

def dragEnterEvent(self, e):

 if e.mimeData().hasFormat('text/plain'):
  e.accept()
 else:
  e.ignore()

首先我們重新實現(xiàn)了dragEnterEvent()方法,并設置可接受的數(shù)據(jù)類型(在這里是普通文本)。

def dropEvent(self, e):

 self.setText(e.mimeData().text())

通過重新實現(xiàn)dropEvent()方法,我們定義了在drop事件發(fā)生時的行為。這里我們改變了按鈕的文字。

edit = QLineEdit('', self)
edit.setDragEnabled(True)

QLineEdit內置了對drag(拖動)操作的支持。我們只需要調用setDragEnabled()方法就可以了。

拖放一個按鈕

在下面的示例中我們將演示如何對一個按鈕控件進行拖放。

import sys
from PyQt5.QtWidgets import QPushButton, QWidget, QApplication
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag


class Button(QPushButton):
 def __init__(self, title, parent):
  super().__init__(title, parent)

 def mouseMoveEvent(self, e):
  if e.buttons() != Qt.RightButton:
   return

  mimeData = QMimeData()

  drag = QDrag(self)
  drag.setMimeData(mimeData)
  drag.setHotSpot(e.pos() - self.rect().topLeft())

  dropAcion = drag.exec_(Qt.MoveAction)

 def mousePressEvent(self, e):
  QPushButton.mousePressEvent(self, e)

  if e.button() == Qt.LeftButton:
   print("press")


class Example(QWidget):
 def __init__(self):
  super().__init__()
  self.initUI()

 def initUI(self):
  self.setAcceptDrops(True)

  self.button = Button("Button", self)
  self.button.move(100, 65)

  self.setWindowTitle("Click or Move")
  self.setGeometry(300, 300, 280, 150)

 def dragEnterEvent(self, e):
  e.accept()

 def dropEvent(self, e):
  position = e.pos()
  self.button.move(position)

  e.setDropAction(Qt.MoveAction)
  e.accept()


if __name__ == "__main__":
 app = QApplication(sys.argv)
 ex = Example()
 ex.show()
 app.exec_()

我們在窗體中創(chuàng)建了一個QPushButton。如果用鼠標左鍵點擊這個按鈕會在控制臺中輸出'press'消息。我們在這個按鈕上實現(xiàn)了拖放操作,可以通過鼠標右擊進行拖動。

class Button(QPushButton):

 def __init__(self, title, parent):
  super().__init__(title, parent)

我們從QPushButton派生了一個Button類,并重新實現(xiàn)了mouseMoveEvent()與mousePressEvent()方法。mouseMoveEvent()方法是拖放操作產生的地方。

if e.buttons() != Qt.RightButton:
 return

在這里我們設置只在鼠標右擊時才執(zhí)行拖放操作。鼠標左擊用于按鈕的點擊事件。

mimeData = QMimeData()

drag = QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())

QDrag提供了對基于MIME的拖放的數(shù)據(jù)傳輸?shù)闹С帧?/p>

dropAction = drag.exec_(Qt.MoveAction)

Drag對象的exec_()方法用于啟動拖放操作。

def mousePressEvent(self, e):

 QPushButton.mousePressEvent(self, e)

 if e.button() == Qt.LeftButton:
  print('press')

鼠標左擊按鈕時我們會在控制臺打印‘press'。注意我們也調用了父按鈕的mousePressEvent()方法。否則會看不到按鈕的按下效果。

position = e.pos()
self.button.move(position)

在dropEvent()方法中,我們要為松開鼠標后的操作進行編碼,并完成drop操作。即找出鼠標指針的當前位置,并將按鈕移動過去。

e.setDropAction(Qt.MoveAction)
e.accept()

我們定義了drop動作的類型。這里是move動作。

本節(jié)教程講解了拖放操作。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python生成九宮格圖片

    python生成九宮格圖片

    這篇文章主要為大家詳細介紹了python生成九宮格圖片,利用Image類將一張圖片分割成9張,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 由淺入深講解python中的yield與generator

    由淺入深講解python中的yield與generator

    這篇文章主要由淺入深講解了python中yield與generator的相關資料,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • 詳解Pytorch+PyG實現(xiàn)GCN過程示例

    詳解Pytorch+PyG實現(xiàn)GCN過程示例

    這篇文章主要為大家介紹了Pytorch+PyG實現(xiàn)GCN過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Pandas如何提取非空行值

    Pandas如何提取非空行值

    這篇文章主要介紹了Pandas如何提取非空行值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Python類型提示Type Hints示例詳解

    Python類型提示Type Hints示例詳解

    在做自動化測試的時候,類型提示會讓你寫代碼時更加流程,當你在一個模塊定義了類型,而其他模塊沒有提示的時候,是相當不方便,這篇文章主要給大家介紹了關于Python類型提示Type Hints的相關資料,需要的朋友可以參考下
    2021-08-08
  • Python常見錯誤:IndexError:?list?index?out?of?range解決

    Python常見錯誤:IndexError:?list?index?out?of?range解決

    最近在寫一個爬蟲程序,但是卻出現(xiàn)了錯誤提示IndexError:?list?index?out?of?range,所以下面這篇文章主要給大家介紹了關于Python常見錯誤:IndexError:?list?index?out?of?range的解決方法,需要的朋友可以參考下
    2023-01-01
  • python-pymongo常用查詢方法含聚合問題

    python-pymongo常用查詢方法含聚合問題

    這篇文章主要介紹了python-pymongo常用查詢方法含聚合問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 基于Python開發(fā)電腦定時關機工具

    基于Python開發(fā)電腦定時關機工具

    這篇文章主要為大家詳細介紹了如何基于Python開發(fā)一個電腦定時關機工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • python計算分段函數(shù)值的方法

    python計算分段函數(shù)值的方法

    這篇文章主要為大家詳細介紹了python計算分段函數(shù)值的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 全面了解Python環(huán)境配置及項目建立

    全面了解Python環(huán)境配置及項目建立

    下面小編就為大家?guī)硪黄媪私釶ython環(huán)境配置及項目建立。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

孝感市| 枝江市| 宁强县| 玛纳斯县| 玉龙| 栾川县| 汾西县| 通化市| 辛集市| 琼海市| 鄂尔多斯市| 如东县| 温宿县| 哈尔滨市| 澎湖县| 彭阳县| 离岛区| 汕尾市| 二连浩特市| 天峨县| 乐山市| 富裕县| 襄樊市| 广饶县| 新兴县| 比如县| 崇礼县| 册亨县| 罗源县| 万年县| 平顶山市| 临夏县| 苗栗县| 道真| 沽源县| 六枝特区| 靖西县| 甘德县| 吴忠市| 安阳县| 铁岭市|