PyQt4 QDockWidget 使用教程
在pyqt4 中 dock 是一个镶嵌在主窗口 而又能拉出来成立一个独立窗口的控件 ,dock 是QDockWidget
的对象
dock=QDockWidget('title',self) #实例化一个dock title 为标题 self 为parent
因为QDockWidget 不添加到布局管理器中 所以我们需要传一个parent 给他
dock.setObjectName("dock") #设置dock的对象名称
dock.setAllowedAreas(Qt.LeftDockWidgetArea
|Qt.RightDockWidgetArea) #设置dock只能在左边 或者右边显示
allowedareas 有Qt.LeftDockWidgetArea Qt.RightDockWidgetArea
Qt.TopDockWidgetArea Qt.BottomDockWidgetArea
Qt.AllDockWidgetAreas
dock.setWidget(QLabel) #添加一个label控件
dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
#设置dock是否可以关闭拉出等
参数还有 QDockWidget.DockWidgetClosable 可以关闭 DockWidgetMovable
可以移动
DockWidgetFloatable #可以独立出来 DockWidgetVerticalTitleBar 垂直显示标题
AllDockWidgetFeatures 除垂直标题以外 以上所有 NoDockWidgetFeatures
self.addDockWidget(Qt.RightDockWidget,dock)
添加dock到主窗口第一个参数为显示位置
PyQt4 在子窗口动态设置父窗口方法
1 采用apply方法
传递需要修改数据的引用给子对话框
在子对话框apply按钮的插槽方法中发出一个信号,如
finshed
接着在父窗口连接这个信号接着显示子窗口child.show()
记得在__init__方法下面写上self.setAttribute(Qt.WA_DeleteOnClose)
这句的作用是在子对话框close的时候把它删除 释放资源 (下面还有另一个方法 释放资源)
2 在父窗口定义一个 字窗口的 接口 如: self.child=None
然后实例子窗口赋给self.child 传递一个callback 函数
if self.child is None: # 这个方法不错
slef.child=childDialog()
self.child.show()
self.child.raise_()
self.child.activateWindow()
下面是实例代码 父窗口
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import ModelDialoglive
class MainForm(QDialog):
def __init__(self,parent=None):
super(MainForm,self).__init__(parent)
self.child=None
self.table=QTableWidget()
self.table.setColumnCount(40)
self.table.setRowCount(30)
self.table.setWhatsThis("mantou")
#set Column tab title
#self.table.setHorizontalHeaderLabels(list(range(5,10)))
for i in range(0,5):
for x in
range(0,7):
item=QTableWidgetItem(str(i+x))
item.setTextAlignment(Qt.AlignLeft |Qt.AlignCenter)
item.setBackgroundColor(Qt.green)
self.table.setItem(x,i,item)
fbutton=QPushButton("&F")
cbutton=QPushButton("&C")
lbutton=QPushButton("&L")
Vlayout=QHBoxLayout()
Vlayout.addWidget(fbutton)
Vlayout.addWidget(lbutton)
Vlayout.addWidget(cbutton)
Hlayout=QVBoxLayout()
Hlayout.addWidget(self.table)
Hlayout.addLayout(Vlayout)
self.setLayout(Hlayout)
self.setGeometry(200,300,500,400)
self.setWindowTitle("Table")
self.connect(lbutton,SIGNAL("clicked()"),self.liveChange)
def callback(self,c=0,r=0):
self.table.clear()
for i in range(0,c):
for x in
range(0,r):
item=QTableWidgetItem(str(i+x))
item.setTextAlignment(Qt.AlignLeft|Qt.AlignCenter)
item.setBackgroundColor(Qt.red)
self.table.setItem(x,i,item)
def liveChange(self):
if self.child==None:
self.child=ModelDialoglive.liveDialog(self.callback,self)
self.child.show()
if __name__=="__main__":
app=QApplication(sys.argv)
mf=MainForm()
mf.show()
app.exec_()
子窗口
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class liveDialog(QDialog):
def __init__(self,callback,parent=None):
super(liveDialog,self).__init__(parent)
self.callback=callback
C_MAX=10
R_MAX=15
self.c_edit=QLineEdit()
self.r_edit=QLineEdit()
layout=QHBoxLayout()
layout.addWidget(self.c_edit)
layout.addWidget(self.r_edit)
self.setLayout(layout)
self.connect(self.c_edit,SIGNAL("textChanged(QString)"),self.updateUi)
self.connect(self.r_edit,SIGNAL("textEdited(QString)"),self.updateUi)
def updateUi(self,text):
c=self.c_edit.text()
r=self.r_edit.text()
if c and r:
self.callback(int(c),int(r))
PyQt4
QCheckBox 使用教程
setChecked(bool) 设置是否选择
isChecked() 返回bool
发出toggled(bool)信号
PyQt4 QTableWidget 使用教程
self.table=QTableWidget() #实例化
self.table.setColumnCount(4)
#设置列数
self.table.setRowCount(6)
#设置行数
self.table.setWhatsThis("mantou") ###
self.table.setEditTriggers(QTableWidget.NoEditTriggers)
#设置为不能编辑单元格
#set Column tab title
self.table.setHorizontalHeaderLabels(list(range(5,10)))
self.table.setVerticalHeaderLabels(["a","d"] ) #设置 行title
self.table.setAlternatingRowColors(bool) #设置交替行颜色
for i in range(0,5):
for x in
range(0,7):
item=QTableWidgetItem(str(i+x)) 实例一个item对象
item.setTextAlignment(Qt.AlignLeft |Qt.AlignCenter) 设置对齐方式
item.setBackgroundColor(Qt.green) 设置背景
self.table.setItem(x,i,item) 添加Item
PyQt4 QVBoxLayout QHBoxLayout QGridLayout
使用教程
pyqt4 的三个布局管理器
QHBoxLayout 水平布局 QVBoxLayout 垂直布局 QGridLayout 表格布局
以下g为表格布局 a b 为水平垂直布局任一个
a.addLayout(b) 添加b布局到a上
a.addSpacing(20) 添加20水平宽度的空白 b类型 垂直方向
a.addStretch(10) 添加一个固定长度的延伸
b.addWidget(QWidget) 添加一个QWidget 到布局
b.addStretchFactor(QWidget,20)
g.addLayout(a,0,2) 在第一行第三列添加一个水平布局
g.addWidget(QWidget,0,2,1,2) 在第一行第三列,占一行 两列 位置 添加一个QWidget
g.setRowStretch(1,20) 设置第二行的高度为20
g.setColumnStretch(1,20) 设置第二列的宽度为20
PyQt4 QListWidget 使用教程
listWidget = QListWidget() #实例化一个(item base)的列表
listWidget.addItem('dd') #添加一个项
listWidget.addItems([]) # 从序列中添加子项
listWidget.setDragEnabled(True) #设置拖拉
listWidget.sortItems() #排序
listWidget.setSortingEnabled(bool) #设置自动排序
listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
#设置选择模式
选择模式有:ExtendedSelection 按住ctrl多选, SingleSelection 单选
MultiSelection 点击多选 ContiguousSelection 鼠标拖拉多选
listWidget.setCurrentRow(0) 设置当前选择行 默认为-1
listWidget.count() #得到子项总数
listWidget.item(row).text() #得到第 row 行的内容 listWidget.item(row)
返回一个item 对象
listWidget.takeItem(row) #返回row 行的 所在的item 对象 可以用在
insertItem()中
listWidget.insertItem(2,item) #在第二行插入一项 item
可谓为一个listviewitem对象或者string
listWidget.setCurrentItem('dd') #设置'dd'为当前项
listWidget.selectedItems() 返回一个 包含item对象 的list 对象
修改item 的内容
item.setText('dsds') # 设置item的内容为dsds item为对象 可从
listWidget.item(row) takeItem(row) 得到
PyQt4
QInputDialog 使用教程
string, ok = QInputDialog.getText(self, '标题', '说明文字')
# 显示一个标题为标题说明文字为说明问题的输入对话框!string 为输入的内容 ok 为点击的按钮
if ok and
not string.isEmpty(): #如果点击了确定 输入了内容
PyQt4
QPushButton 使用教程
button = QPushButton('***) # 实例化一个text为***)的按钮
button.setFocusPolicy() #设置焦点样式 样式有:Qt.NoFocus:
无焦点,Qt.TabFocus:用tab切换焦点,Qt.ClickFocus:点击切换焦点,Qt.StrongFocus:貌似跟click一样
Qt.WheelFocus
button.setCheckable(True) #设置为开关按钮 toggle 就是按下按钮不会弹起
button.isChecked() 返回bool值 只有setCheckable()为true时有效
button.setShortcut('Ctrl+F') #设置快捷方式