wxPython & PyQT

  • 推荐看github官方的demo
  • 部分转载自:here
  • > * PyQt4 26个实例

wxPython

安装

  • sudo apt-get install python-wxtools

小例子

一个小白框

#!/usr/bin/python
#coding=utf-8
import wx
app = wx.App(False)  # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True)     # Show the frame.
app.MainLoop()
  • app = wx.App(False) 每一个wxPython app 都是 wx.App 的一个实例。 对于大多数简单的应用程序来说,你可以使用 wx.App 原型。当你用到更复杂的应用程序时,你需要扩展 wx.App 类。参数 “False” 表示 “不要重定向stdout and stderr 到一个窗口”。
  • wx.Frame(None,wx.ID_ANY,”Hello”) wx.Frame 是一个顶层窗口。语法是 x.Frame(Parent, Id, Title) 。大部分结构有这样的形式 (一个父对象,后面跟一个ID)。在这个例子中,我们使用 None 表示没有”父对象” , wx.ID_ANY 要求 wxWidgets 为我们分配一个id。
  • frame.Show(True) 我们通过”showing” 来显示则个框架。
  • app.MainLoop() 最后,我们启动应用程序的 MainLoop 语句,它的作用是处理事件。

小编辑器

import wx
class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200,100))
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.CreateStatusBar() # A Statusbar in the bottom of the window

        # Setting up the menu.
        filemenu= wx.Menu()

        # wx.ID_ABOUT and wx.ID_EXIT are standard IDs provided by wxWidgets.
        filemenu.Append(wx.ID_ABOUT, "&About"," Information about this program")
        filemenu.AppendSeparator()
        filemenu.Append(wx.ID_EXIT,"E&xit"," Terminate the program")

        # Creating the menubar.
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
        self.SetMenuBar(menuBar)  # Adding the MenuBar to the Frame content.
        self.Show(True)

app = wx.App(False)
frame = MainWindow(None, "Sample editor")
app.MainLoop()
  • 第一部是做一个包含可编辑文本框的简单框架。 文本框用到了 wx.TextCtrl 组件。 默认情况下,文本框是一个单行字段,但是wx.TE_MULTILINE 参数允许你输入多行文本
  • 在这个例子中, 我们从 wx.Frame 派生并且重写了 init 方法。 这里我们声明了一个新的 wx.TextCtrl ,这是一个简单的文本编辑控件。请注意:由于 MyFrame 在内置的 init 方法运行了 self.Show() , 我们不需要再显示的调用 frame.Show()
  • 请注意 wx.ID_ABOUT 和wx.ID_EXIT 标示。 这些是wxWidgets提供的标准IDS (see a full listhere)。 如果有可用的,使用标准标示是一个很好的习惯。 这有助于让 wxWidgets 知道如何在每一个平台显示这个组件,使其看起来更加自然

PyQT

安装

  • 安装sip 这个是python和qt之间的c和c++连接库的东东
  • sudo apt-get install python-sip
  • sudo apt-get install sip-dev
  • 安装qmake及qt4
  • sudo apt-get install libqt4-dev libqt4-dbg libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig
  • 安装pyqt4
  • sudo apt-get install python-qt4
  • 安装eric4 eric是pyqt的界面设计器的代码生成软件
  • sudo apt-get install eric
  • 一次性安装
  • sudo apt-get install libqt4-dev libqt4-dbg libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig && sudo apt-get install python-qt4 && sudo apt-get install eric &&sudo apt-get install python-sip sip-dev

小例子

空白框

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('PyQt')
widget.show()
sys.exit(app.exec_())
  • 第2行引入的QtGui是PyQt中最基本的模块,包含了PyQt的绘图组件及其相关类。
  • 第3行使用QApplication创建了一个application。每个PyQt程序中均要包含一个application对象。
  • 第4行使用QWidget创建了一个widget。
  • 并在第5行中使用resize设置了它的大小。
  • 第6行的setWindowsTitle设置了窗口标题的文字。
  • 第7行的show使这个widget显示出来。
  • 最后一行是这个程序的主循环,事件处理从本行语句开始。至于为什么是exec_而不是exec呢?是因为exec是Python的关键字。

PyQt4 查询流表路径的一个小程序

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
from OpFlow import * # 这是自己写的一个python文件,在github上
class LayoutDialog(QDialog):
    def __init__(self, parent=None):
        super(LayoutDialog, self).__init__(parent)
        self.setWindowTitle("Path Check")
        self.CreateControls()
        self.Layout()
        self.ConnectSignalSlot()
    def CreateControls(self):
        self.label_0 = QLabel(self.tr("src IP:"))
        self.label_1 = QLabel(self.tr("dst IP:"))
        self.label_2 = QLabel(self.tr("Path:"))
        self.srcip = QLineEdit()
        self.dstip = QLineEdit()
        self.path = QTextEdit()
        self.btn_check = QPushButton(self.tr("Check"))
        self.btn_check.clicked.connect(self.buttonClicked)
    def buttonClicked(self):
        srcip = self.srcip.text()
        dstip = self.dstip.text()
        res = control.getSwitchFlowPath(str(srcip), str(dstip))
        self.path.clear()
        for string in res:
            self.path.append(string)
    def Layout(self):
        self.LeftLayout()
        mainLayout = QGridLayout(self)
        mainLayout.setMargin(10)
        mainLayout.setSpacing(10)
        mainLayout.addLayout(self.leftLayout, 0, 0)
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)
    def LeftLayout(self):
        self.leftLayout = QGridLayout()
        self.leftLayout.addWidget(self.label_0, 0, 0)
        self.leftLayout.addWidget(self.label_1, 1, 0)
        self.leftLayout.addWidget(self.label_2, 3, 0)
        self.leftLayout.addWidget(self.srcip, 0, 1)
        self.leftLayout.addWidget(self.dstip, 1, 1)
        self.leftLayout.addWidget(self.path, 3, 1)
        self.leftLayout.setColumnStretch(0, 1)
        self.leftLayout.setColumnStretch(1, 3)
        self.leftLayout.addWidget(self.btn_check)
    def ConnectSignalSlot(self):
        pass
control = Controller()
app = QApplication(sys.argv)
dialog = LayoutDialog()
dialog.show()
app.exec_()

PyQt5 简易计算器

import sys
from PyQt5 import QtWidgets,QtCore,QtGui

class Example(QtWidgets.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

        self.reset()

    def initUI(self):
        self.setWindowTitle('简易计算器')
        grid = QtWidgets.QGridLayout()

        self.display = QtWidgets.QLineEdit('0')
        self.display.setFont(QtGui.QFont("Times", 20))
        self.display.setReadOnly(True)
        self.display.setAlignment(QtCore.Qt.AlignRight)
        self.display.setMaxLength(15)
        grid.addWidget(self.display,0,0,1,4)

        names = ['Clear', 'Back', '', 'Close',
                '7', '8', '9', '/',
                '4', '5', '6', '*',
                '1', '2', '3', '-',
                '0', '.', '=', '+']
        pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                (1, 0), (1, 1), (1, 2), (1, 3),
                (2, 0), (2, 1), (2, 2), (2, 3),
                (3, 0), (3, 1), (3, 2), (3, 3 ),
                (4, 0), (4, 1), (4, 2), (4, 3)]
        c = 0
        for name in names:
            button = QtWidgets.QPushButton(name)
            button.setFixedSize(QtCore.QSize(60,30))
            button.clicked.connect(self.buttonClicked) # 给每个按钮设置信号/槽
            if c == 2:
                pass
                #grid.addWidget(QtWidgets.QLabel(''), 0, 2) #替换 第三个按钮 为 文本标签!
            else:
                grid.addWidget(button, pos[c][0]+1, pos[c][1])
            c = c + 1

        self.setLayout(grid)

    def buttonClicked(self):
        #sender = self.sender();  # 确定信号发送者
        #self.display.setText(sender.text())
        text = self.sender().text()
        if text in '+-*/':
            self.history.append(self.number) # 数字入栈
            self.history.append(text) # 运算符入栈
            self.operator = text # 设置当前运算符
            self.number = "" # 数字清空
            self.numberType = "int"
            return
        elif text == "=":
            self.calculate() # 计算
        elif text == "Back":
            pass
        elif text == "Clear":
            self.reset()
        elif text == "Close":
            self.close()
        elif text == ".":
            if self.numberType == "int":
                self.number += text
                self.numberType = "float"
        else:
            self.number = self.number + text if self.number != "0" else text

        self.display.setText(self.number)

    def calculate(self):
        pass

    def reset(self):
        self.number = "0"
        self.result = 0
        self.history = []
        self.operator = '' # +,-,*,/
        self.numberType = 'int' # int与float两种,如果输入了小数点则为实数

app = QtWidgets.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

PyQt4经典的26个实例教程

  • 地址
  • 还有PDF版的

你可能感兴趣的:(Python)