wxPython & PyQT
来源:互联网 发布:java删除压缩文件 编辑:程序博客网 时间:2024/06/16 13:52
- 推荐看github官方的demo
- 部分转载自:here
- > * PyQt4 26个实例
wxPython
安装
- sudo apt-get install python-wxtools
小例子
一个小白框
#!/usr/bin/python#coding=utf-8import wxapp = 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 wxclass 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 sysfrom PyQt4 import QtGuiapp = 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 sysfrom 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): passcontrol = Controller()app = QApplication(sys.argv)dialog = LayoutDialog()dialog.show()app.exec_()
PyQt5 简易计算器
import sysfrom PyQt5 import QtWidgets,QtCore,QtGuiclass 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版的
1 0
- wxPython & PyQT
- pycharm anaconda wxpython/pyqt 安装
- wxPython与pyQt集成的小案例
- PyQt
- PyQt
- PyQt
- PYQT
- wxPython
- wxPython
- wxPython
- wxpython
- wxPython
- wxpython
- wxPython之hello wxPython
- wxPython:关闭wxPython程序
- 【wxPython】wxPython简介
- Python + PyQt
- PyQt编程
- Docker学习一(安装docker并构建一个可ssh登录的镜像)
- Elasticsearch安装与测试验证详解
- AJAX工作原理及其优缺点
- WIN10 VBOX UBUNTU 网络访问不了
- Problem C: The Same Color
- wxPython & PyQT
- Git常用操作
- java学习地图
- Hadoop map与reduce数量
- CodeForces 510B Fox And Two Dots(DFS)
- 修改oracle数据库用户名及密码的方法
- 什么是Dubbo
- Problem H: Eat Candy
- android生成随机汉字