PySide教程:简单的对话框应用程序

  本文将展示如何使用基本控件创建简单的对话框。主要流程是用户在QLineEdit中键入名字,点击QPushButton后会看见问候。

  下面这个小程序将创建和显示对话框,小程序会在整个过程中更新,你可以将这个程序用在你需要的项目中。

PySide教程:简单的对话框应用程序PySide教程:简单的对话框应用程序代码

#!/usr/bin/python
#
-*- coding: utf-8 -*-

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class Form(QDialog):

def __init__(self, parent=None):
super(Form, self).
__init__(parent)
self.setWindowTitle(
"My Form")


if __name__ == '__main__':
# Create the Qt Application
app = QApplication(sys.argv)
# Create and show the form
form = Form()
form.show()
# Run the main Qt loop
sys.exit(app.exec_())

      假如你看过前面的教程,你大概已经熟悉上面的不少代码了吧,应该对引入包、创建应用以及执行Qt主循环很熟悉了。唯一新的地方是类定义。

       你可以创建任意PySide控件的子类。在这里,我们继承QDialog并做了自定义,将名字指定为"Form"。同时,我们实现了 init()方法,init()调用了父类QDialog的init()方法,并调用了setWindowTitle()方法,这个方法设置了对话框窗体的标题。在main()函数中,你可以看到我们创建了Form对象并将其显示出来。

  创建控件
       我们将要创建两个控件 - QLineEdit给用户输入 名字,QPushButton则用来显示QLineEdit的内容。因此,我们把下面两行代码加入 init()方法中。


# Create widgets
self.edit = QLineEdit("Write my name here..")
self.button
= QPushButton("Show Greetings")

     可以看到,两个控件都显示了相应的文字。

  为控件创建布局
       Qt为了帮助用户在其程序中组织控件而引入了一些布局。这个例子里,我们做简单化处理,只创建一个QVBoxLayout,这个而已将在竖直方向分布控件。把下面的代码加入init()中创建控件后的地方。


# Create layout and add widgets
layout = QVBoxLayout()
layout.addWidget(self.edit)
layout.addWidget(self.button)
# Set dialog layout
self.setLayout(layout)

       我们创建了而已,使用addWidget()方法添加了这些控件。最终窗体将使用我们QVBoxLayout作为其布局。

  创建显示的函数并连接至按钮

       最终,我们需要在窗体中加入显示用户的函数,并连接到我们的按钮上。函数是窗体的一部分,所以需要加在init()函数的后面。


# Greets the user
def greetings(self):
print ("Hello %s" % self.edit.text())

       为了得到需要显示的内容,我们调用了QLineEdit.text()方法。

       现在,我们需要的都有了,只剩下把QPushButton连接到Form.greetings()方法。在init()函数里,我们添加下面的代码:


# Add button signal to greetings slot
self.button.clicked.connect(self.greetings)

     在程序运行后,你就可以在QLineEdit中输入你的名字并在终端里看到问候了。

  你还可以接着做

  • 用MessageBox而不是在终端里显示自己的名字。查看 QMessageBox 的帮助文档 ,试试吧。
  • 你可以尝试着给Window添加一个图标 。查看 QWidget的文档
  • 添加一个关闭按钮如何?只需要添加一个按钮,将其加入而已,再把它连接到exit槽就可以了。
  • 你也可以把布局改为水平方向,使用QHBoxLayout. 在PySide Layout 中查看更多,比如 QHBoxLayout, QGridLayout.
上一篇:Android本地应用程序也使用Intent来启动Activity和子Activity


下一篇:解决数据库无法启动的原因