fromComboBox = QComboBox() 添加一个 combobox
fromComboBox.addItem(rates) 添加一个下拉选项
fromComboBox.addItems(["%d years" % x for x in range(2, 26)]) 从序列中添加
fromComboBox.setMaxVisibleItems(10) #设置最大显示下列项 超过要使用滚动条拖拉
fromComboBox.setMaxCount(5) #设置最大下拉项 超过将不显示
fromComboBox.setInsertPolicy(QComboBox.InsertAfterCurrent) #设置插入方式
插入方式有:NoInsert,InsertAtTop,InsertAtCurrent,InsertAtBottom,InsertAfterCurrent
InsertBeforeCurrent,InsertAlphabetically
字面意思都好理解 最后一个是按字母表顺序插入
QComboBox 发出一个currentIndexChanged(int) 的信号.
QComboBox 得到当前项 currentIndex() + 1 #QComboBox 默认的currentIndex为 -1
QComboBox.findText('dsfds') #返回 内容为dsfds的索引
QComboBox 得到当前项文本内容 currentText()
fromSpinBox = QDoubleSpinBox()
fromSpinBox.setRange(0.01, 10000000.00)
fromSpinBox.setSuffix(" %d") #设置后缀 如显示 10.0%d
fromSpinBox.setPrefix('#d') #设置前缀
fromSpinBox.setValue(1.00) 设置值
QDoubleSpinBox 发出 valueChanged(double) 信号 有setValue(double)插槽
QLineEdit 单行输入框
lineedit = QLineEdit() 实例化一个输入框
lineedit =setReadOnly(True) #设置为只读
lineedit.setDragEnabled(True) #设置能接受拖放
lineedit.setMaxLength(5) #设置最大长度
lineedit.selectAll() #全选
lineedit.setFocus() #得到焦点
lineedit.setInputMask("dx") #设置修饰 该输入框必须输入两个字符
punctuationRe = QRegExp(r"[ ,;:.]") #得到一个regexp对象 可用下面的验证
lineedit.setValidator(QRegExpValidator(QRegExp(r"[0-9]+")),self) #设置验证 检验用户输入内容
lineedit.emit(SIGNAL('textChanged(QString)')) 发出 信号 (设置为只读时貌似发不出 没有具体测试)
lineedit.emit(SIGNAL(textEdited(QString)')) 发出 信号 如果设置了验证 该信号在通过验证才能发出 (设置为只读时貌似发不出 没有具体测试)
Qt4 在子窗口动态设置父窗口方法
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))