python图形化编程拖放_PythonGUI教程(⼗⼆):使⽤拖放
控件
在之前的⽂章中,构建了⼀个稍显复杂的GUI并且使⽤Qthread进⾏了线程的管理。
本篇,我们继续学习PyQt5的使⽤——介绍在GUI中使⽤拖放(Drag 和Drop)控件。
拖放动作
在GUI中,拖放指的是点击⼀个对象,并将其拖动到另⼀个对象上的动作。⽐如百度云PC客户端⽀持的拖放⽂件以快速移动⽂件:
拖放动作能够很直观很⽅便的在GUI程序中完成⼀些很复杂或繁琐的操作。
在PyQt中实现拖放
在PyQt5中,我们也可以很轻松地使⽤拖放功能。
使⽤Qt设计师或者使⽤API都可以实现。我们先使⽤Qt设计师将GUI的图形设计出来,在之前的GUI的基础上,我们新建⼀个选项卡。
我们新建了⼀个选项卡,然后在⾥⾯放置了⼀个LineEdit部件,⼀个PushButton部件,两个ListWidget部件。
python入门教程app对于简单的拖放效果,我们可以直接使⽤Qt设计师中的选项进⾏设置。例如,我们直接可以使⽤dragEnable属性、dragDropOverwriteMode属性、dragDropMode属性为ListWidget部件设置拖放功能:
⽽⼀些稍微复杂的拖放功能,就需要编写Python逻辑处理代码来完成了。
我们先将UI⽂件保存并转换为Python⽂件。
pyuic5 -o conplex_window_drag.py conplex_window.ui
然后,新建⼀个Python⽂嘉drag.py,在⽂件中引⼊刚刚转换好的Python⽂件:# coding:utf-8
# 州的先⽣ zmister Python GUI教程
from PyQt5 import QtCore,QtWidgets,QtGui
from GUI import conplex_window_drag
import sys
import time
class MainWindow(object):
def __init__(self):
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
self.ui = conplex_window_drag.Ui_MainWindow()
self.ui.setupUi(MainWindow)
self.update_date()
self.update_calendar()
self.set_lcd()
self.set_dial()
self.update_progressbar()
禁用javascript目的self.set_font()
MainWindow.show()
坚持慢跑治愈了类风湿
<_())
# 修改⽇期修改器数值
def update_date(self):
self.ui.dateEdit.setDate(self.ui.calendarWidget.selectedDate())
# ⽇历信号槽
def update_calendar(self):
self.ui.t(self.update_date)
# 设置LCD数字
def set_lcd(self):
self.ui.lcdNumber.display(self.ui.dial.value())
# 刻度盘信号槽
def set_dial(self):
self.ui.dial.valueChanged['int'].connect(self.set_lcd)
# 州的先⽣ zmister
# 按钮信号槽
def update_progressbar(self):
self.ui.t(self.start_progressbar)
编程猫打地鼠教程self.ui.radioButton_t(self.stop_progressbar)
self.ui.radioButton_set_progressbar)
self.progress_value = 0
self.stop_progress = False
def progressbar_counter(self, start_value=0):
self.run_thread = RunThread(parent=None, counter_start=start_value) self.run_thread.start()
self.t(self.set_progressbar)
def set_progressbar(self, counter):
if not self.stop_progress:smallint怎么读
self.ui.progressBar.setValue(counter)
# 启动进度栏
def start_progressbar(self):
bgpropertiesself.stop_progress = False
self.progress_value = self.ui.progressBar.value()
self.progressbar_counter(self.progress_value)
# 停⽌进度栏
def stop_progressbar(self):
self.stop_progress = True
try:
self.run_thread.stop()
except:
pass
# 重设进度栏
def reset_progressbar(self):
self.stop_progressbar()
self.progress_value = 0
self.set()
self.stop_progress = False
# 字体选择
def set_font(self):
self.ui.fontComboBox.activated['QString'].connect(self.ui.label.setText) class RunThread(QtCore.QThread):
# 定义⼀个新的信号
counter_value = QtCore.pyqtSignal(int)
def __init__(self, parent=None, counter_start=0):
super(RunThread, self).__init__(parent)
self.is_running = True
def run(self):
unter < 100 and self.is_running == True:
time.sleep(0.1)
unter)
# 发出⼀个新值的信号
def stop(self):
self.is_running = False
print('线程停⽌中...')
if __name__ == "__main__":
MainWindow()
运⾏代码正常:
接着,我们创建⼀个DragDropButton()类,⽤来处理按钮的拖放:
class DragDropButton(QtWidgets.QPushButton):
def __init__(self, text, parent):
super().__init__(text, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, event):
if event.mimeData().hasFormat('text/plain'):
event.accept()
else:
event.ignore()
def dropEvent(self, event):
self.setText(event.mimeData().text())
我们使⽤setAcceptDrops属性设置按钮接收拖放事件,创建⼀个dragEnterEvent()⽅法⽤来设置拖的事件响应,创建⼀个dropEvent()⽅法⽤来设置放的事件响应。
接着我们在MainWindow()主类中,调⽤它:
class MainWindow(object):
def __init__(self):
……
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论