青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 41, 文章 - 8, 評論 - 8, 引用 - 0
數(shù)據(jù)加載中……

[Python][PyQt4]在 PyQt4 中 drag 和 drop

在 PyQt4 中 drag 和 drop

本部分,我們將討論 drag 和 drop 操作。

在計(jì)算機(jī)中的圖形界面中, drag-and-drop 是例如點(diǎn)擊到一個虛擬對象并把它拖到另外的位置上的行為。一般來說,這可以用于很多行為,或創(chuàng)建兩個對象間的關(guān)聯(lián)。(Wikipedia)

drag 和 drop 的功能是 GUI 最有用的功能之一。它可以是用戶處理復(fù)雜的工作。

一般來說,我們可以 drag 和 drop 兩種東西,數(shù)據(jù)或圖形對象。如果我們吧一幅圖像從一個應(yīng)用拖到另一個應(yīng)用,我們處理的是二進(jìn)制數(shù)據(jù)。如果我們在 Firefox 中拖動了一個標(biāo)簽,我們拖的則是一個圖形組件。

簡單的 Drag 和 Drop

第一個例子,我們將有一個 QtGui.QLineEditQtGui.QPushButton 。我們將從行編輯區(qū)拖動文本到按鈕上。

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 tutorial
This is a simple drag and
drop example.
author: Jan Bodnar
website: zetcode.com
last edited: December 2010
"""
import sys
from PyQt4 import QtGui
class Button(QtGui.QPushButton):
    def __init__(self, title, parent):
        super(Button, self).__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(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        edit = QtGui.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)
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()
if __name__ == '__main__':
    main()

簡單的拖拽操作。

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

為了可以把文字拖到 QtGui.QPushButton 組件上,我們必需要重新實(shí)現(xiàn)一些方法。所以我們創(chuàng)建了我們自己的按鈕類。它從 QtGui.QPushButton 派生。

self.setAcceptDrops(True)

我們開啟允許接受拖入的事件。

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

首先,我們重新實(shí)現(xiàn)了 drageEnterEvent() 方法。我們將接受特定的數(shù)據(jù)類型,此處是純文本。

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

通過重新實(shí)現(xiàn) dropEvent() 方法,我們定義了放下后處理的事件。我們在這里是改變了按鈕中的顯示文本。

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

QtGui.QLineEdit 組件有內(nèi)置的拖拽操作。我們只需要調(diào)用 setDragEnabled() 激活它就可以了。

拖拽一個按鈕組件

下面的例子,我們將介紹如何拖拽一個按鈕對象。

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
ZetCode PyQt4 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: December 2010
"""
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
class Button(QtGui.QPushButton):
    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)
    def mouseMoveEvent(self, e):
        if e.buttons() != QtCore.Qt.RightButton:
            return
        mimeData = QtCore.QMimeData()
        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(e.pos() - self.rect().topLeft())
        dropAction = drag.start(QtCore.Qt.MoveAction)
    def mousePressEvent(self, e):
        QtGui.QPushButton.mousePressEvent(self, e)
        if e.button() == QtCore.Qt.LeftButton:
            print 'press'
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__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(QtCore.Qt.MoveAction)
        e.accept()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()
if __name__ == '__main__':
    main()

在這個例子中,我們有一個 QtGui.QPushButton 在窗口上。如果我們點(diǎn)擊按鈕,將在控制臺上輸出 ‘press’ 。而如果右擊按鈕并且移動,我們就可以拖拽這個按鈕組件。

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

我們創(chuàng)建了一個派生自 QtGui.QPushButton 的按鈕類。我們還重新實(shí)現(xiàn)了 QtGui.QPushButton 中的兩個方法, mouseMoveEvent()mousePressEvent() 。其中, mouseMoveEvent() 方法是開始拖拽處發(fā)生的地方。

if event.buttons() != QtCore.Qt.RightButton:
    return

我們決定只用鼠標(biāo)右擊進(jìn)行拖拽。左擊用于點(diǎn)擊按鈕。

mimeData = QtCore.QMimeData()
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(event.pos() - self.rect().topLeft())

我們創(chuàng)建了一個 QDrag 對象。

dropAction = drag.start(QtCore.Qt.MoveAction)

start() 方法開始拖拽操作。

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

如果點(diǎn)擊了鼠標(biāo)左鍵,我們在控制臺上打印 ‘press’ 。注意,我們還調(diào)用了父類的 mousePressEvent() 方法。否則,我們將不會看到按鈕被按下。

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

dropEvent() 方法中,定義了當(dāng)我們松開鼠標(biāo)按鈕停止拖拽的行為。我們找到鼠標(biāo)當(dāng)前的位置,并把按鈕移到合適的位置。

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

我們指定了拖拽的類型。在此處是移動的行為。


本部分我們討論了拖拽。

posted on 2012-02-12 10:14 mirguest 閱讀(1255) 評論(0)  編輯 收藏 引用 所屬分類: Python

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲男女自偷自拍| 亚洲一区3d动漫同人无遮挡| 国产精品久久久久久亚洲调教 | 欧美激情a∨在线视频播放| 欧美日韩三区| 欧美激情亚洲一区| 黑人中文字幕一区二区三区| 一区二区免费看| 99视频在线观看一区三区| 久久综合999| 久久琪琪电影院| 国产精品私房写真福利视频| 亚洲免费电影在线| 99综合精品| 欧美日韩精品二区第二页| 欧美激情精品久久久| 在线观看亚洲一区| 久久精品亚洲乱码伦伦中文| 久久精品国产99| 国产欧美一区二区白浆黑人| 亚洲午夜精品一区二区三区他趣| 一区二区三区四区五区精品| 欧美激情亚洲国产| 亚洲精品国产精品久久清纯直播| 在线观看日韩av电影| 欧美综合第一页| 狂野欧美一区| 在线国产亚洲欧美| 免费成人在线视频网站| 欧美不卡在线| 亚洲精品在线二区| 欧美日韩不卡一区| 一二三四社区欧美黄| 亚洲一区二区三区中文字幕在线| 欧美日韩一区综合| 亚洲欧美日韩一区二区在线| 久久国产精品一区二区三区| 国产午夜精品视频| 久久综合精品国产一区二区三区| 欧美成人黄色小视频| 亚洲精品免费在线| 欧美日韩一区二区高清| 亚洲亚洲精品三区日韩精品在线视频| 香蕉av777xxx色综合一区| 国产美女精品视频免费观看| 久久免费视频在线观看| 亚洲人成在线免费观看| 午夜精品www| 怡红院精品视频在线观看极品| 媚黑女一区二区| 这里只有精品视频| 蜜臀va亚洲va欧美va天堂| 亚洲美女尤物影院| 国产伦精品一区二区三区免费迷| 欧美综合激情网| 亚洲精品无人区| 欧美影院一区| 亚洲精品色图| 国产视频欧美视频| 欧美激情欧美激情在线五月| 亚洲伊人网站| 亚洲国产精品第一区二区三区| 亚洲一区二区三区中文字幕| 精品成人一区二区| 欧美午夜精品理论片a级按摩| 午夜在线不卡| 亚洲毛片av在线| 久久久久久久久蜜桃| 日韩视频中文| 激情综合网址| 国产精品婷婷| 欧美国产精品劲爆| 久久福利视频导航| 亚洲一级影院| 亚洲美女免费视频| 亚洲高清不卡在线| 久久精品国产69国产精品亚洲| 99国内精品| 最新高清无码专区| 好看的av在线不卡观看| 国产精品久久久久久一区二区三区| 久久久久一区二区| 性久久久久久久| 一级日韩一区在线观看| 亚洲欧洲日韩女同| 欧美激情成人在线视频| 久久久精品免费视频| 亚洲欧美99| 亚洲色无码播放| 亚洲三级免费电影| 亚洲国产精品一区二区三区 | 欧美日韩精品伦理作品在线免费观看 | 午夜天堂精品久久久久| 亚洲伦伦在线| 最新日韩av| 欧美国产精品va在线观看| 久久久久天天天天| 久久精品一区蜜桃臀影院 | 欧美成人激情视频免费观看| 欧美在线观看一区| 午夜精品在线视频| 亚洲男同1069视频| 亚洲影音先锋| 亚洲欧美日韩专区| 亚洲欧美另类国产| 亚洲欧美日韩综合国产aⅴ| 亚洲午夜精品网| 亚洲一区二区高清| 亚洲在线一区二区| 亚洲欧美日韩综合| 欧美一区二区视频在线观看| 亚洲女同性videos| 欧美在线1区| 久久久水蜜桃av免费网站| 久久久久国产一区二区| 狂野欧美激情性xxxx欧美| 蜜臀91精品一区二区三区| 欧美激情精品久久久久| 欧美福利小视频| 亚洲高清久久| 99在线|亚洲一区二区| 亚洲视频在线观看| 亚洲欧洲99久久| 久久久99久久精品女同性| 麻豆亚洲精品| 欧美日韩一区二区视频在线| 国产精品久久久久9999| 国产亚洲精品久久久久婷婷瑜伽| 狠狠色伊人亚洲综合成人| 91久久精品国产91性色tv| 日韩亚洲成人av在线| 午夜精品一区二区在线观看| 久久久人成影片一区二区三区观看 | 乱中年女人伦av一区二区| 欧美成人精精品一区二区频| 欧美午夜无遮挡| 国产午夜精品美女视频明星a级| 在线观看一区| 亚洲午夜精品一区二区三区他趣| 久久国产精品久久久久久电车| 免费高清在线视频一区·| 亚洲区一区二区三区| 亚洲欧美日韩一区二区在线| 欧美aaa级| 国产日韩一区| 日韩午夜三级在线| 久久久91精品国产| 亚洲精品偷拍| 久久久久久69| 国产精品久久久久久久免费软件| 在线观看一区欧美| 午夜精品视频在线观看| 亚洲电影成人| 欧美在线免费视屏| 欧美日韩精品伦理作品在线免费观看| 国产一区二区三区久久精品| 在线性视频日韩欧美| 玖玖玖免费嫩草在线影院一区| 99国产精品久久久久老师| 久久久亚洲一区| 国产精品嫩草影院av蜜臀| 亚洲精品免费看| 久久亚洲一区二区三区四区| 中文日韩电影网站| 欧美成人伊人久久综合网| 国产欧美一区在线| 中文无字幕一区二区三区| 亚洲电影免费观看高清| 久久精品国产亚洲一区二区三区 | 欧美大片一区二区三区| 亚洲在线成人| 欧美午夜久久久| 日韩图片一区| 欧美激情在线| 久久人人97超碰精品888| 国产日韩欧美在线观看| 亚洲一级高清| 亚洲美女福利视频网站| 欧美激情亚洲| 亚洲人永久免费| 你懂的国产精品| 久久久精品国产99久久精品芒果| 国产精品日韩欧美大师| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美激情女人20p| 久久中文字幕一区| 亚洲黄色小视频| 欧美大香线蕉线伊人久久国产精品| 性色av香蕉一区二区| 国产精品一区一区| 欧美专区中文字幕| 午夜精品国产更新| 国产日韩欧美麻豆| 久久精品最新地址| 久久成人av少妇免费| 一区二区三区在线高清| 欧美sm极限捆绑bd| 欧美国产国产综合| 亚洲视屏在线播放| 亚洲一二三四区|