免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6814 | 回复: 2

pyqt4 如何在程序启动的时候弹出一个对话框呢? [复制链接]

论坛徽章:
0
发表于 2011-11-14 11:32 |显示全部楼层
在用pyqt4 写一个程序,希望在程序启动的时候先弹出一个对话框来让用户输入一些信息(不是帐号密码),如何实现这个对话框的主动弹出呢

尝试过用emit来发信号,但好象不能触发,有点python 基础,初学pyqt4,希望能得到各位的帮助,谢谢,下面是一个模拟实现初始代码,网上找来的,改了些内容,但实现不了自己的目的




#!/usr/bin/env python
#coding=utf-8



import sys

from PyQt4.QtCore import *

from PyQt4.QtGui import *



class FontPropertiesDlg(QDialog):



    def __init__(self,parent=None):

        super(FontPropertiesDlg, self).__init__(parent)

        FontStyleLabel = QLabel(u"中文字体:")

        self.FontstyleComboBox = QComboBox()

        self.FontstyleComboBox.addItems([u"宋体",u"黑体", u"仿宋", u"隶书", u"楷体"])

        self.FontEffectCheckBox =QCheckBox(u"使用特效")

        FontSizeLabel = QLabel(u"字体大小")

        self.FontSizeSpinBox = QSpinBox()

        self.FontSizeSpinBox.setRange(1, 90)
        okButton = QPushButton(u"确定")

        cancelButton = QPushButton(u"取消")



        buttonLayout = QHBoxLayout()

        buttonLayout.addStretch()

        buttonLayout.addWidget(okButton)

        buttonLayout.addWidget(cancelButton)

        layout = QGridLayout()

        layout.addWidget(FontStyleLabel, 0, 0)

        layout.addWidget(self.FontstyleComboBox, 0, 1)

        layout.addWidget(FontSizeLabel, 1, 0)

        layout.addWidget(self.FontSizeSpinBox, 1, 1)

        layout.addWidget(self.FontEffectCheckBox,1,2)

        layout.addLayout(buttonLayout, 2, 0)

        self.setLayout(layout)



        self.connect(okButton,SIGNAL("clicked()"),self,SLOT("accept()"))
        self.connect(cancelButton,SIGNAL("clicked()"),self,SLOT("reject()"))

        self.setWindowTitle(u"字体")


class MainDialog(QDialog):

    def __init__(self,parent=None):

        super(MainDialog,self).__init__(parent)

        self.FontPropertiesDlg=None

        self.format=dict(fontstyle=u"宋体",fontsize=1,fonteffect=False)

        FontButton1 = QPushButton(u"设置字体(模态)")

        FontButton2 = QPushButton(u"设置字体(非模态)")

        self.label = QLabel(u"默认选择")

        layout = QGridLayout()

        layout.addWidget(FontButton1,0,0)

        layout.addWidget(FontButton2,0,1)

        layout.addWidget(self.label)

        self.setLayout(layout)
        self.connect(FontButton1,SIGNAL("clicked()"),self.FontModalDialog)
        self.connect(FontButton2,SIGNAL("clicked()"),self.FontModalessDialog)

        self.start_setting = True

        if self.start_setting:
            FontButton1.emit(SIGNAL("clicked()"))
            print "this is the signal after send out"
            #seilf.connect(okButton,SIGNAL("clicked()"),self,SLOT("accept()"))
            self.start_setting = False



        self.setWindowTitle(u"模态和非模态对话框")

        self.updataData()



    def updataData(self):

        self.label.setText(u"选择的字体:%s<br>字体大小:%d<br>是否特效:%s"                           %(self.format["fontstyle"],self.format["fontsize"],self.format["fonteffect"]))

    def FontModalDialog(self):

        dialog = FontPropertiesDlg(self)

        if dialog.exec_():

            self.format["fontstyle"] = unicode(dialog.FontstyleComboBox.currentText())

            self.format["fontsize"] = dialog.FontSizeSpinBox.value()

            self.format["fonteffect"] = dialog.FontEffectCheckBox.isChecked()
            self.updataData()

    def FontModalessDialog(self):

        pass



app = QApplication(sys.argv)

font= MainDialog()

font.show()

app.exec_()



_____________

        self.start_setting = True

        if self.start_setting:
            FontButton1.emit(SIGNAL("clicked()"))
            print "this is the signal after send out"
            #seilf.connect(okButton,SIGNAL("clicked()"),self,SLOT("accept()"))
            self.start_setting = False
___________这一段是修改的,想模拟点击来弹出对话框,但没有实现,请大家帮助或者提供一些有用的link参考消息

论坛徽章:
0
发表于 2011-11-17 16:23 |显示全部楼层
你可以再设置一个窗口,输完了点确定后跳到你要的窗口!这不是和账号密码框一个道理吗?

论坛徽章:
0
发表于 2011-12-09 20:55 |显示全部楼层
为什么不直接在MainDialog.__init__最后一行调用FontModalDialog函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP