pyQt 例程学习 -1-

试用了一段时间wxpython,想尝试一下pyQt,看看两者到底那个更好使些。网上赞pyQt的不少,应该也不是空穴来风,我看了几个pyQt的demo,的确很强大,虽然wxpython也不赖。更主要的原因是wxwidgets沿用MFC那套消息机制在python下看来有些繁琐,想试试Qt的signal-slot方式。

一、MDI - pyQt demo

1. 主窗口继承自QtGui.QMainWindow

2. 初始化过程 __init__(self):

2.1  代码

        super(MainWindow, self).__init__()

        self.mdiArea = QtGui.QMdiArea()
        self.mdiArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.mdiArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
        self.setCentralWidget(self.mdiArea)
中间两个长行代码显然是设定滑动轨何时出现的。另外也看到了Qt MDI的构建模型, 先创建一个MDI区域,再设定主窗口的中心组件为它。

2.2 代码

        self.mdiArea.subWindowActivated.connect(self.updateMenus)
        self.windowMapper = QtCore.QSignalMapper(self)
        self.windowMapper.mapped[QtGui.QWidget].connect(self.setActiveSubWindow)
第一行:当子窗口被激活后触发updateMenus操作。

第二行:创建信号映射器

第三行:绑定信号映射到setActiveSubWindow函数,传入该函数的参数为QtGui.QWidget类型。

附加说明:

            action.triggered.connect(self.windowMapper.map)
            self.windowMapper.setMapping(action, window)

其中action为一个菜单项,window为子窗口对象。当点击一个菜单项触发操作时,会将触发者自身作为一个Key值,到windowMapper.map中查找Value值,这个Value就是窗口对象window,(是setMapping(action, window)将两者绑定成一个字典),再将window值传入由映射器绑定的统一处理函数setActiveSubWindow。

3. 添加子窗口

        child = MdiChild()
        self.mdiArea.addSubWindow(child)


4. 获得子窗口列表

windows = self.mdiArea.subWindowList()

5. 添加菜单项

        self.fileMenu = self.menuBar().addMenu("&File")
        self.fileMenu.addAction(self.newAct)
        self.fileMenu.addAction(self.openAct)
        self.fileMenu.addAction(self.saveAct)
        self.fileMenu.addAction(self.saveAsAct)
        self.fileMenu.addSeparator()
菜单子项为:

        self.newAct = QtGui.QAction(QtGui.QIcon(':/images/new.png'), "&New",
                self, shortcut=QtGui.QKeySequence.New,
                statusTip="Create a new file", triggered=self.newFile)




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值