from PyQt4 import QtCore, QtGui
class QueueManagerScreen(QtGui.QDialog):
def __init__(self, parent=None):
super(QueueManagerScreen, self).__init__(parent)
self.createItems()
self.currentTable=[]
def createItems(self):
self.queue_area1 = QtGui.QTabWidget()
self.queue_area1.setMovable(True)
tab_bar = tabBar(self)
self.queue_area1.setTabBar(tab_bar)
self.tab = Widget(self)
self.tab.snaddr="00"
self.tab.spaddr="00"
self.OutLayout=QtGui.QHBoxLayout()
self.Label=QtGui.QGroupBox(u"布局")
self.table = self.QueueTableNormal()###表格
self.TabLayout = QtGui.QGridLayout()
self.TabLayout.addWidget(self.table,0,0,1,1)
self.Label.setLayout(self.TabLayout)
self.OutLayout.addWidget(self.Label)
self.currentTable.append(self.table)
self.table.update()
self.tab.setLayout(self.OutLayout)
self.queue_area1.insertTab(0, self.tab, u'屏1')
self.queue_area1.setStyleSheet("QTabWidget::tab-bar{alignment:left;border:1px solid red}")
def QueueTableNormal(self):#表格
QTableWidget=QtGui.QTableWidget()
QTableWidget.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
QTableWidget.horizontalScrollBar().setContextMenuPolicy(QtCore.Qt.NoContextMenu)
QTableWidget.verticalScrollBar().setContextMenuPolicy(QtCore.Qt.NoContextMenu)
QTableWidget.setColumnCount(1)
QTableWidget.setRowCount(1)
# QTableWidget.setMouseTracking(True)
QTableWidget.installEventFilter(self)##安装事件过滤
QTableWidget.setStyleSheet("QTableWidget::item:selected{border:1px solid #1E90FF; background-color:transparent} " )
return QTableWidget
def eventFilter(self, obj, event):##想通过事件过滤只有左点击表格内单元格才能生效
if obj == self.table:
if event.type() == QtCore.QEvent.MouseButtonPress and event.mouse() == QtCore.Qt.LeftButton:
self.close()
return True
return QtCore.QObject.eventFilter(self, obj, event)
def mousePressEvent(self, mouseEvent):
self.currentTable[self.tableidx].mousePressEvent(mouseEvent)
if mouseEvent.button() == QtCore.Qt.RightButton:
print('右点击')
elif mouseEvent.button() == QtCore.Qt.LeftButton:
print('左点击 ')
唯一真正的区别是一个同步块可以选择它同步的对象。一个同步方法只能使用'this'(或相应的类实例用于同步类方法)。例如,这些在语义上是等同的:
synchronized void foo() {
...
}
void foo() {
synchronized (this) {
...
}
}
后者更灵活,因为它可以竞争任何对象的关联锁,通常是成员变量。它也更精细,因为您可以在块之前和之后执行并发代码,但仍然在方法中。当然,通过将并发代码重构为单独的非同步方法,您可以轻松地使用同步方法。使用任何一个让代码更易理解的地方。
使用同步方法的块没有明显的优势。
也许唯一一个(但我不称之为优势)是你不需要包含对象的引用this。
方法:
public synchronized void method() { // blocks "this" from here....
...
...
...
} // to here
块:
public void method() {
synchronized( this ) { // blocks "this" from here ....
....
....
....
} // to here...
}