如何使用pyQt的pyqt tablewidgettTree实

用PyQt实现透明桌面时钟小部件! - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 9时,
用PyQt实现的透明桌面时钟小部件,本质上就是一无边框背景透明用在最前的小widget,支持拖动,支持缩放.....
代码片段(2)
1.&[代码]因为用了PyQt,所以注意下GPL啦....&&&&
#coding=utf-8
Created on
@author: 大孟
import sys
from PyQt4 import
QtGui, QtCore
from PyQt4.QtCore import Qt
from PyQt4.QtCore import QPoint
from PyQt4.QtCore import QTimer
from PyQt4.QtCore import QTime
from PyQt4.QtGui import QPainter
from PyQt4.QtGui import QColor
from PyQt4.QtGui import QPolygon
from PyQt4.QtCore import SIGNAL as signal
class Clock(QtGui.QWidget):
def __init__(self):
Constructor
super(Clock, self).__init__()
self.hourColor=QColor(127, 0, 127);
self.minuteColor=QColor(0, 127, 127, 191)
self.secondColor=QColor(127, 127,0,120)
self.initUI()
self.timer = QTimer()
self.timer.timeout.connect(self.update)
self.timer.start(30)
self.show()
def handChange(self):
self.side = min(self.width(), self.height())
self.hand=(max(self.side/200,4), max(self.side/100,8), max(self.side/40,30))
self.hourHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2])])
self.minuteHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*2)])
self.secondHand=QPolygon([QPoint(self.hand[0],self.hand[1]),QPoint(-self.hand[0],self.hand[1]),QPoint(0,-self.hand[2]*3)])
def set_transparency(self, enabled):
if enabled:
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_NoSystemBackground, False)
#下面这种方式好像不行
pal=QtGui.QPalette()
pal.setColor(QtGui.QPalette.Background, QColor(127, 127,10,120))
self.setPalette(pal)
self.setAttribute(Qt.WA_TranslucentBackground, enabled)
self.repaint()
def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Clock')
self.handChange()
self.rightButton=False
# 下面两个配合实现窗体透明和置顶
sizeGrip=QtGui.QSizeGrip(self)
self.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint|Qt.SubWindow )
#self.setMouseTracking(True);
self.trans=True
self.set_transparency(True)
quitAction = QtGui.QAction(QtGui.QIcon('quit.png'), '&Quit', self)
self.connect(quitAction,signal("triggered()"),QtGui.qApp.quit)
backAction = QtGui.QAction( '&Back', self)
self.connect(backAction,signal("triggered()"),self.backClicked)
self.popMenu= QtGui.QMenu()
self.popMenu.addAction(quitAction)
self.popMenu.addAction(backAction)
def resizeEvent(self, e):
self.handChange()
def backClicked(self):
if self.trans == True :
self.trans = False
self.set_transparency(False)
self.trans = True
self.set_transparency(True)
def mouseReleaseEvent(self,e):
if self.rightButton == True:
self.rightButton=False
self.popMenu.popup(e.globalPos())
def mouseMoveEvent(self, e):
if e.buttons() & Qt.LeftButton:
self.move(e.globalPos()-self.dragPos)
e.accept()
def mousePressEvent(self, e):
if e.button() == Qt.LeftButton:
self.dragPos=e.globalPos()-self.frameGeometry().topLeft()
e.accept()
if e.button() == Qt.RightButton and self.rightButton == False:
self.rightButton=True
def paintEvent(self, e):
time = QTime.currentTime()
qp = QPainter()
qp.begin(self)
#qp.setRenderHint(QPainter.Antialiasing)
# 开启这个抗锯齿,会很占cpu的!
qp.translate(self.width() / 2, self.height() / 2)
qp.scale(self.side / 200.0, self.side / 200.0)
qp.setPen(QtCore.Qt.NoPen)
qp.setBrush(self.hourColor)
qp.rotate(30.0 * ((time.hour() + time.minute()/ 60.0)))
qp.drawConvexPolygon(self.hourHand)
qp.restore()
qp.setPen(self.hourColor)
for i in range(12):
qp.drawLine(88, 0, 96, 0)
qp.rotate(30.0)
qp.setPen(QtCore.Qt.NoPen)
qp.setBrush(self.minuteColor)
qp.rotate(6.0 * ((time.minute() + (time.second()+time.msec()/1000.0) / 60.0)))
qp.drawConvexPolygon(self.minuteHand)
qp.restore()
qp.setPen(self.minuteColor)
for i in range(60):
if (i % 5) is not 0:
qp.drawLine(92, 0, 96, 0)
qp.rotate(6.0)
qp.setPen(QtCore.Qt.NoPen)
qp.setBrush(self.secondColor)
qp.rotate(6.0*(time.second()+time.msec()/1000.0))
qp.drawConvexPolygon(self.secondHand)
qp.restore()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
clock = Clock()
sys.exit(app.exec_())
2.&[图片] clock2.png&&&&
开源中国-程序员在线工具:
相关的代码(17)
4回/8093阅
3回/6543阅
6回/5249阅
22回/4396阅
3回/3986阅
22回/3008阅
3回/2914阅
25回/2636阅
4回/2366阅
2回/2238阅
这个比较牛
2楼:风见_隼人 发表于
3楼:kinru 发表于
标上数字会更炫
4楼:PengMei 发表于
好炫呀。。。。
5楼:xtrace 发表于
6楼:walkskyer 发表于
很棒!!!!
7楼:施小喵 发表于
弱弱的说。。。这个在qt自带的examples里不是有吗。。。
开源从代码分享开始
dameng的其它代码qtreeview - Developing pyqt4 tree widget - Stack Overflow
to customize your list.
Join the Stack Overflow Community
Stack Overflow is a community of 6.6 million programmers, just like you, helping each other.
J it only takes a minute:
i need to write a tree?, in pyqt. It looks like this:
Clients(this is text)
Type A (this is a Clients child and has a checkbox)
Type B (this is a Clients child and has a checkbox)
Vendors(this is text)
(this is a Vendors child and has a checkbox)
(this is a Vendors child and has a checkbox)
Time Period
Init(this is a Time Period child, and would be a calendarWidget for date selection)
End (this is a Time Period child, and would be a calendarWidget for date selection)
What would you recommend for this? QTreeWidget? QTreeView?
This will be clickable items that i'll use to build sql queries.
Thanks for reading.
I recommend you to use
instead of , because your tasks are pretty simple.
(with custom model, for example ) is for difficult events. Yours is simple.
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.treeWidget = QtGui.QTreeWidget()
self.treeWidget.setHeaderHidden(True)
self.addItems(self.treeWidget.invisibleRootItem())
self.treeWidget.itemChanged.connect (self.handleChanged)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.treeWidget)
self.setLayout(layout)
def addItems(self, parent):
column = 0
clients_item = self.addParent(parent, column, 'Clients', 'data Clients')
vendors_item = self.addParent(parent, column, 'Vendors', 'data Vendors')
time_period_item = self.addParent(parent, column, 'Time Period', 'data Time Period')
self.addChild(clients_item, column, 'Type A', 'data Type A')
self.addChild(clients_item, column, 'Type B', 'data Type B')
self.addChild(vendors_item, column, 'Mary', 'data Mary')
self.addChild(vendors_item, column, 'Arnold', 'data Arnold')
self.addChild(time_period_item, column, 'Init', 'data Init')
self.addChild(time_period_item, column, 'End', 'data End')
def addParent(self, parent, column, title, data):
item = QtGui.QTreeWidgetItem(parent, [title])
item.setData(column, QtCore.Qt.UserRole, data)
item.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator)
item.setExpanded (True)
return item
def addChild(self, parent, column, title, data):
item = QtGui.QTreeWidgetItem(parent, [title])
item.setData(column, QtCore.Qt.UserRole, data)
item.setCheckState (column, QtCore.Qt.Unchecked)
return item
def handleChanged(self, item, column):
if item.checkState(column) == QtCore.Qt.Checked:
print "checked", item, item.text(column)
if item.checkState(column) == QtCore.Qt.Unchecked:
print "unchecked", item, item.text(column)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
2,33321737
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
rev .24780
Stack Overflow works best with JavaScript enabled转载请标明出处:, 本文出自:tabwidget双击关闭功能,类&#浏览器。由于工作需要,显示到网上搜索了相关文章,提示重写doubleclick事件,然后发送tabCloseRequested(int) 信号所以,马上自定义Qtabwidget类,重写mouseDoubleClickEvent方法,发现点击上面的tab没反应,点击下面的窗口反而有反应,尝试失败。看会PYQT4手册,发现Qtabwidget有一个setTabBar方法,所以想,应该是重写tabbar的mouseDoubleClickEvent方法,测试成功。上代码,再解释#coding:utf-8
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class KUnit:
@staticmethod
def run(name,C):
if name == "__main__":
import sys
app = QApplication(sys.argv)
obj.show()
sys.exit(app.exec_())
class KTabBar(QTabBar):
#自定义tabbar,实现双击关闭
def __init__(self,parent = None):
QTabBar.__init__(self,parent)
def mouseDoubleClickEvent(self, event):
#获取点击的tab
tabId = self.tabAt(event.pos())
#发送关闭信号和tabid
self.emit(SIGNAL("tabCloseRequested(int)"),self.tabAt(event.pos()))
QTabBar.mouseDoubleClickEvent(self, event)
class MyDialog(QDialog):
def __init__(self,parent = None):
QDialog.__init__(self,parent)
layout = QVBoxLayout(self)
self.setFixedSize(QSize(500,500))
self.tabwidget = QTabWidget()
layout.addWidget(self.tabwidget)
#设置tabwidget的bar
self.tabwidget.setTabBar(KTabBar())
#允许tab点击关闭
self.tabwidget.setTabsClosable(True)
self.tabwidget.addTab(QDialog(),"tab1")
self.tabwidget.addTab(QDialog(),"tab2")
self.tabwidget.addTab(QDialog(),"tab3")
self.tabwidget.addTab(QDialog(),"tab4")
self.tabwidget.addTab(QDialog(),"tab5")
#连接信号槽
self.connect(self.tabwidget, SIGNAL("tabCloseRequested(int)"),self.closeTab)
def closeTab(self,tabId):
#关闭置顶信号槽
self.tabwidget.removeTab(tabId)
KUnit.run(__name__,MyDialog)上面的代码有3个类:KUnit,调试用的KTabBar,重写QTabBar控件MyDialog,测试窗口KUnit 不需要多解释了,KTabBar 主要是重写 mouseDoubleClickEvent方法,重点是(获取到双击的tab)和(发送关闭信号)。通过tabAt(event.pos())获取双击的tab 的索引,tabAt方法也是查询手册发现的。然后就发送关闭信号。MyDialog 类先布局,然后设置tabwidget的tabbar(setTabBar),然后开启点击关闭的功能(setTabsClosable),添加测试窗口,最后绑定信号槽,然后用自定义的closeTab方法接受传过来的tabId,最后调用 removeTab 方法关闭tab!最后,自己还有个疑问,我是在tabbar发送的 tabCloseRequested(int) 信号,但是这个信号应该是tabwidget的,为啥没报错呢!求路过的大牛解答!附件地址:望看官多多发言!!!
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 11:12收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1}

我要回帖

更多关于 pyqt treewidget 例子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信