国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

pyqt5——拖拽

UsherChen / 1260人閱讀

摘要:把一個(gè)表格從上拖放到另外一個(gè)位置的實(shí)質(zhì)是操作一個(gè)圖形組。激活組件的拖拽事件。設(shè)定好接受拖拽的數(shù)據(jù)類型。默認(rèn)支持拖拽操作,所以我們只要調(diào)用方法使用就行了。從繼承一個(gè)類,然后重構(gòu)的兩個(gè)方法和是拖拽開(kāi)始的事件。指定放下的動(dòng)作類型為。

拖拽

在GUI里,拖放是指用戶點(diǎn)擊一個(gè)虛擬的對(duì)象,拖動(dòng),然后放置到另外一個(gè)對(duì)象上面的動(dòng)作。一般情況下,需要調(diào)用很多動(dòng)作和方法,創(chuàng)建很多變量。

拖放能讓用戶很直觀的操作很復(fù)雜的邏輯。

一般情況下,我們可以拖放兩種東西:數(shù)據(jù)和圖形界面。把一個(gè)圖像從一個(gè)應(yīng)用拖放到另外一個(gè)應(yīng)用上的實(shí)質(zhì)是操作二進(jìn)制數(shù)據(jù)。把一個(gè)表格從Firefox上拖放到另外一個(gè)位置 的實(shí)質(zhì)是操作一個(gè)圖形組。

簡(jiǎn)單的拖放

本例使用了QLineEditQPushButton。把一個(gè)文本從編輯框里拖到按鈕上,更新按鈕上的標(biāo)簽(文字)。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial

This is a simple drag and
drop example. 

Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""

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

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 and drop")
        self.setGeometry(300, 300, 300, 150)


if __name__ == "__main__":
  
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()
class Button(QPushButton):
  
    def __init__(self, title, parent):
        super().__init__(title, parent)
        
        self.setAcceptDrops(True)

為了完成預(yù)定目標(biāo),我們要重構(gòu)一些方法。首先用QPushButton上構(gòu)造一個(gè)按鈕實(shí)例。

self.setAcceptDrops(True)

激活組件的拖拽事件。

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

首先,我們重構(gòu)了dragEnterEvent()方法。設(shè)定好接受拖拽的數(shù)據(jù)類型(plain text)。

def dropEvent(self, e):

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

然后重構(gòu)dropEvent()方法,更改按鈕接受鼠標(biāo)的釋放事件的默認(rèn)行為。

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

QLineEdit默認(rèn)支持拖拽操作,所以我們只要調(diào)用setDragEnabled()方法使用就行了。

程序展示:

拖放按鈕組件

這個(gè)例子展示怎么拖放一個(gè)button組件。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial

In this program, we can press on a button with a left mouse
click or drag and drop the button with  the right mouse click. 

Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""

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

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())

        dropAction = drag.exec_(Qt.MoveAction)


    def mousePressEvent(self, e):
      
        super().mousePressEvent(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_()

上面的例子中,窗口上有一個(gè)QPushButton組件。左鍵點(diǎn)擊按鈕,控制臺(tái)就會(huì)輸出press。右鍵可以點(diǎn)擊然后拖動(dòng)按鈕。

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

QPushButton繼承一個(gè)Button類,然后重構(gòu)QPushButton的兩個(gè)方法:mouseMoveEvent()mousePressEvent().mouseMoveEvent()是拖拽開(kāi)始的事件。

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

我們只劫持按鈕的右鍵事件,左鍵的操作還是默認(rèn)行為。

mimeData = QMimeData()

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

創(chuàng)建一個(gè)QDrag對(duì)象,用來(lái)傳輸MIME-based數(shù)據(jù)。

dropAction = drag.exec_(Qt.MoveAction)

拖放事件開(kāi)始時(shí),用到的處理函數(shù)式start().

def mousePressEvent(self, e):
    
    QPushButton.mousePressEvent(self, e)
    
    if e.button() == Qt.LeftButton:
        print("press")

左鍵點(diǎn)擊按鈕,會(huì)在控制臺(tái)輸出“press”。注意,我們?cè)诟讣?jí)上也調(diào)用了mousePressEvent()方法,不然的話,我們是看不到按鈕按下的效果的。

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

dropEvent()方法里,我們定義了按鈕按下后和釋放后的行為,獲得鼠標(biāo)移動(dòng)的位置,然后把按鈕放到這個(gè)地方。

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

指定放下的動(dòng)作類型為moveAction。

程序展示:

這個(gè)就一個(gè)按鈕,沒(méi)啥可展示的,弄GIF太麻煩了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42973.html

相關(guān)文章

  • pyqy5——控件2

    摘要:歡迎加群與我一起學(xué)習(xí)創(chuàng)建一個(gè)對(duì)象,接收一個(gè)文件作為參數(shù)。三個(gè)窗口和兩個(gè)分割線的布局創(chuàng)建完成了,但是要注意,有些主題下,分割線的顯示效果不太好。本例包含了一個(gè)和一個(gè)。 控件2 本章我們繼續(xù)介紹PyQt5控件。這次的有QPixmap,QLineEdit,QSplitter,和QComboBox。 圖片 QPixmap是處理圖片的組件。本例中,我們使用QPixmap在窗口里顯示一張圖片。 #...

    Jochen 評(píng)論0 收藏0
  • PyQt5 簡(jiǎn)介

    摘要:是由一系列模塊組成。超過(guò)個(gè)類,函數(shù)和方法。有兩種證書(shū),和商業(yè)證書(shū)。包含了窗口系統(tǒng)事件處理圖像基本繪畫(huà)字體和文字類。包含了協(xié)議的類。提供了處理數(shù)據(jù)庫(kù)的工具。廢棄了和的調(diào)用方式,使用了新的信號(hào)和處理方式。不再支持被標(biāo)記為廢棄的或不建議使用的。 本教程的目的是帶領(lǐng)你入門(mén)PyQt5。教程內(nèi)所有代碼都在Linux上測(cè)試通過(guò)。PyQt4 教程是PyQt4的教程,PyQt4是一個(gè)Python(同時(shí)支...

    sevi_stuo 評(píng)論0 收藏0
  • 事件和信號(hào)——pyQT5

    摘要:事件目標(biāo)是事件想作用的目標(biāo)。處理事件方面有個(gè)機(jī)制。這個(gè)例子中,我們替換了事件處理器函數(shù)。代表了事件對(duì)象。程序展示信號(hào)發(fā)送實(shí)例能發(fā)送事件信號(hào)。我們創(chuàng)建了一個(gè)叫的信號(hào),這個(gè)信號(hào)會(huì)在鼠標(biāo)按下的時(shí)候觸發(fā),事件與綁定。 事件和信號(hào) 事件 signals and slots 被其他人翻譯成信號(hào)和槽機(jī)制,(⊙o⊙)…我這里還是不翻譯好了。 所有的應(yīng)用都是事件驅(qū)動(dòng)的。事件大部分都是由用戶的行為產(chǎn)生的,...

    張春雷 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<