PyQt基本操作
2011-11-16 22:27 Rollen Holt 阅读(48025) 评论(21) 编辑 收藏 举报PyQt的简介和基本安装方法读者可以自行google解决。先声明,本文章教基础,参考《征服Python》相关章节。不过不得不说,pyQt的教程真的好少,╮(╯▽╰)╭,悲催,大家有什么好的资料推荐一下,谢谢了。
先建立一个基本的界面看看:
import sys from PyQt4 import QtCore, QtGui class MyWindow( QtGui.QMainWindow ): def __init__( self ): QtGui.QMainWindow.__init__( self ) self.setWindowTitle( "PyQt" ) self.resize( 300, 200 ) app = QtGui.QApplication( sys.argv ) mywindow = MyWindow() mywindow.show() app.exec_()
运行结果:
然后我们添加一个标签:
#coding=utf-8 #标签的使用 import sys from PyQt4 import QtCore, QtGui class Window( QtGui.QMainWindow ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 200, 300 ) #添加标签 label = QtGui.QLabel( "label" ) label.setAlignment( QtCore.Qt.AlignCenter ) self.setCentralWidget( label ) app = QtGui.QApplication( sys.argv ) demo = Window() demo.show() app.exec_()
效果如下:
基本布局:
#coding=gbk import sys from PyQt4 import QtCore, QtGui class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) hBoxLayout1 = QtGui.QHBoxLayout() label1 = QtGui.QLabel( "Label1" ) label2 = QtGui.QLabel( "Label2" ) label3 = QtGui.QLabel( "Label3" ) label4 = QtGui.QLabel( "Label4" ) label5 = QtGui.QLabel( "Label5" ) #---------添加表格布局 gridLayout = QtGui.QGridLayout() gridLayout.addWidget( label1 , 0, 0 ) gridLayout.addWidget( label2 , 0, 1 ) gridLayout.addWidget( label3 , 0, 2 ) gridLayout.addWidget( label4 , 1, 0 ) gridLayout.addWidget( label5 , 1, 1 ) self.setLayout( gridLayout ) #-------添加水平布局 # hBoxLayout1.addWidget( label1 ) # hBoxLayout1.addWidget( label2 ) # hBoxLayout1.addWidget( label3 ) # hBoxLayout1.addWidget( label4 ) # hBoxLayout1.addWidget( label5 ) # # self.setLayout( hBoxLayout1 ) #---------添加垂直布局 # vBoxLayout = QtGui.QVBoxLayout() # vBoxLayout.addWidget( label1 ) # vBoxLayout.addWidget( label2 ) # vBoxLayout.addWidget( label3 ) # vBoxLayout.addWidget( label4 ) # vBoxLayout.addWidget( label5 ) # # self.setLayout( vBoxLayout ) # app = QtGui.QApplication( sys.argv ) demo = Window() demo.show() app.exec_()
效果:
按钮基本使用
#coding=utf-8 #按钮操作 import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) gridlayout = QtGui.QGridLayout() button1 = QtGui.QPushButton( "button1" ) gridlayout.addWidget( button1, 0, 0, 1, 3 ) button2 = QtGui.QPushButton( "button2" ) button2.setFlat( True ) gridlayout.addWidget( button2, 1, 1, 1, 3 ) self.setLayout( gridlayout ) app = QtGui.QApplication( sys.argv ) demo = Window() demo.show() app.exec_()
不过按钮2当你点击的时候才显示出来哦
现在看看单行文本和多行文本
#coding=utf-8 import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) gridlayout = QtGui.QGridLayout() str = "hello" #这里中文乱码,纠结 label = QtGui.QLabel( str ) label.setAlignment( QtCore.Qt.AlignCenter ) textFile = QtGui.QLineEdit() gridlayout.addWidget( label, 0, 0 ) gridlayout.addWidget( textFile ) passwordFile = QtGui.QLineEdit() passwordFile.setEchoMode( QtGui.QLineEdit.Password ) gridlayout.addWidget( passwordFile ) textArea = QtGui.QTextEdit() textArea.setText( "asdasda" ) gridlayout.addWidget( textArea ) self.setLayout( gridlayout ) app = QtGui.QApplication( sys.argv ) window = Window() window.show() app.exec_()
单选和复选框
import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) hboxlayout = QtGui.QHBoxLayout() self.radio1 = QtGui.QRadioButton( "radio1" ) self.radio2 = QtGui.QRadioButton( "radio2" ) self.radio3 = QtGui.QRadioButton( "radio3" ) self.radio1.setChecked( True ) hboxlayout.addWidget( self.radio1 ) hboxlayout.addWidget( self.radio2 ) hboxlayout.addWidget( self.radio3 ) checkbox1 = QtGui.QCheckBox( "checkbox1" ) checkbox2 = QtGui.QCheckBox( "checkbox2" ) checkbox3 = QtGui.QCheckBox( "checkbox3" ) checkbox1.setChecked( True ) hboxlayout.addWidget( checkbox1 ) hboxlayout.addWidget( checkbox2 ) hboxlayout.addWidget( checkbox3 ) self.button = QtGui.QPushButton( "Ok" ) hboxlayout.addWidget( self.button ) self.connect( self.button, QtCore.SIGNAL( 'clicked()' ), self.OnButton ) self.setLayout( hboxlayout ) def OnButton( self ): if self.radio2.isChecked(): self.radio2.setText( "haha" ) app = QtGui.QApplication( sys.argv ) win = Window() win.show() app.exec_()
现在看看菜单:
#coding=utf-8 #菜单事件 import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QMainWindow ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) menubar = self.menuBar() self.file = menubar.addMenu( '&File' ) open = self.file.addAction( 'Open' ) self.connect( open, QtCore.SIGNAL( 'triggered()' ), self.OnOpen ) save = self.file.addAction( 'Save' ) self.connect( save, QtCore.SIGNAL( 'triggered()' ), self.OnSave ) self.file.addSeparator() close = self.file.addAction( "Close" ) self.connect( close, QtCore.SIGNAL( 'triggered()' ), self.OnClose ) self.label = QtGui.QLabel( "this is a google test" ) self.label.setAlignment( QtCore.Qt.AlignCenter ) self.setCentralWidget( self.label ) def OnOpen( self ): self.label.setText( "open" ) def OnSave( self ): self.label.setText( "save" ) def OnClose( self ): self.close() def contextMenuEvent( self, event ): self.file.exec_( event.globalPos() ) app = QtGui.QApplication( sys.argv ) win = Window() win.show() app.exec_()
点击右键也可以看看哦
现在是对话框的代码:
#coding=utf-8 #对话框 import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) gridlayout = QtGui.QGridLayout() self.AboutButton = QtGui.QPushButton( "About" ) gridlayout.addWidget( self.AboutButton, 0, 0 ) self.AboutQtButton = QtGui.QPushButton( "AboutQt" ) gridlayout.addWidget( self.AboutQtButton, 0, 1 ) self.CriticalButton = QtGui.QPushButton( "CriticalButton" ) gridlayout.addWidget( self.CriticalButton, 1, 0 ) self.InfoButton = QtGui.QPushButton( "Info" ) gridlayout.addWidget( self.InfoButton, 1, 1 ) self.QuestionButton = QtGui.QPushButton( "Question" ) gridlayout.addWidget( self.QuestionButton, 2, 0 ) self.WarningButton = QtGui.QPushButton( "Warning" ) gridlayout.addWidget( self.WarningButton, 2, 1 ) spacer = QtGui.QSpacerItem( 200, 80 ) gridlayout.addItem( spacer, 3, 1, 1, 5 ) self.setLayout( gridlayout ) self.connect( self.AboutButton, QtCore.SIGNAL( 'clicked()' ), self.OnAboutButton ) self.connect( self.AboutQtButton, QtCore.SIGNAL( 'clicked()' ), self.OnAboutQtButton ) self.connect( self.CriticalButton, QtCore.SIGNAL( 'clicked()' ), self.OnCriticalButton ) self.connect( self.InfoButton, QtCore.SIGNAL( 'clicked()' ), self.OnInfoButton ) self.connect( self.QuestionButton, QtCore.SIGNAL( 'clicked()' ), self.OnQuestionButton ) self.connect( self.WarningButton, QtCore.SIGNAL( 'clicked()' ), self.OnWarningButton ) def OnAboutButton( self ): QtGui.QMessageBox.about( self, 'PyQt', "About" ) def OnAboutQtButton( self ): QtGui.QMessageBox.aboutQt( self, "PyQt" ) def OnCriticalButton( self ): r = QtGui.QMessageBox.critical( self, "PyQT", "CriticalButton", QtGui.QMessageBox.Abort, QtGui.QMessageBox.Retry, QtGui.QMessageBox.Ignore ) if r == QtGui.QMessageBox.Abort: self.setWindowTitle( "Abort" ) elif r == QtGui.QMessageBox.Retry: self.setWindowTitle( "Retry" ) elif r == QtGui.QMessageBox.Ignore: self.setWindowTitle( "Ignore" ) else: pass def OnInfoButton( self ): QtGui.QMessageBox.information( self, "Pyqt", "information" ) def OnQuestionButton( self ): r = QtGui.QMessageBox.question( self, "PyQt", "Question", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, QtGui.QMessageBox.Cancel ) def OnWarningButton( self ): r = QtGui.QMessageBox.warning( self, "PyQT", "warning", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No ) app = QtGui.QApplication( sys.argv ) win = Window() win.show() app.exec_()
现在是文件选择,字体选择,颜色选择框:
#coding=utf-8 import sys from PyQt4 import QtGui, QtCore class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 500, 500 ) gridlayout = QtGui.QGridLayout() self.button1 = QtGui.QPushButton( "File" ) self.button2 = QtGui.QPushButton( "Font" ) self.button3 = QtGui.QPushButton( "Color" ) gridlayout.addWidget( self.button1 ) gridlayout.addWidget( self.button2 ) gridlayout.addWidget( self.button3 ) spacer = QtGui.QSpacerItem( 200, 80 ) gridlayout.addItem( spacer, 3, 1, 1, 3 ) self.setLayout( gridlayout ) self.connect( self.button1, QtCore.SIGNAL( 'clicked()' ), self.OnButton1 ) self.connect( self.button2, QtCore.SIGNAL( 'clicked()' ), self.OnButton2 ) self.connect( self.button3, QtCore.SIGNAL( 'clicked()' ), self.OnButton3 ) def OnButton1( self ): fileName = QtGui.QFileDialog.getOpenFileName( self, 'Open' ) if not fileName.isEmpty(): self.setWindowTitle( fileName ) def OnButton2( self ): font, ok = QtGui.QFontDialog.getFont() if ok: self.setWindowTitle( font.key() ) def OnButton3( self ): color = QtGui.QColorDialog.getColor() if color.isValid(): self.setWindowTitle( color.name() ) app = QtGui.QApplication( sys.argv ) win = Window() win.show() app.exec_()
现在还是对话框:
#coding=utf-8 import sys from PyQt4 import QtGui, QtCore class MyDialog( QtGui.QDialog ): def __init__( self ): super( MyDialog, self ).__init__() self.setWindowTitle( "Dialog" ) self.gridlayout = QtGui.QGridLayout() self.label = QtGui.QLabel( "Please Input:" ) self.textField = QtGui.QLineEdit() self.okButton = QtGui.QPushButton( "OK" ) self.cancalButton = QtGui.QPushButton( "Cancel" ) self.gridlayout.addWidget( self.label , 0, 0 ) self.gridlayout.addWidget( self.textField , 0, 1 ) self.gridlayout.addWidget( self.cancalButton , 0, 2 ) self.gridlayout.addWidget( self.okButton , 0, 3 ) self.connect( self.okButton, QtCore.SIGNAL( 'clicked()' ), self.OnOk ) self.connect( self.cancalButton, QtCore.SIGNAL( 'clicked()' ), self.OnCancel ) self.setLayout( self.gridlayout ) def OnOk( self ): self.text = self.textField.text() self.done( 1 ) def OnCancel( self ): self.done( 0 ) class Window( QtGui.QWidget ): def __init__( self ): super( Window, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 400, 300 ) hboxlayout = QtGui.QGridLayout() self.creatDialogButton = QtGui.QPushButton( "Create a new Dialog" ) hboxlayout.addWidget( self.creatDialogButton ) self.setLayout( hboxlayout ) self.connect( self.creatDialogButton, QtCore.SIGNAL( 'clicked()' ), self.OnButton ) def OnButton( self ): dialog = MyDialog() r = dialog.exec_() if r: self.creatDialogButton.setText( dialog.text ) app = QtGui.QApplication( sys.argv ) win = Window() win.show() app.exec_()
最后一个是利用Designer写的
利用他设计一个简单的界面,只有一个标签和一个文本框
代码如下:
#coding=utf-8 import sys from PyQt4 import QtGui, QtCore, uic class MyDialog( QtGui.QDialog ): def __init__( self ): super( MyDialog, self ).__init__() uic.loadUi( "res.ui", self ) class MyWindow( QtGui.QWidget ): def __init__( self ): super( MyWindow, self ).__init__() self.setWindowTitle( "hello" ) self.resize( 300, 200 ) gridlayout = QtGui.QGridLayout() self.button = QtGui.QPushButton( "CreateDialog" ) gridlayout.addWidget( self.button ) self.setLayout( gridlayout ) self.connect( self.button, QtCore.SIGNAL( 'clicked()' ), self.OnButtoN ) def OnButtoN( self ): dialog = MyDialog() r = dialog.exec_(); if r: self.button.setText( dialog.textField.text() ) app = QtGui.QApplication( sys.argv ) demo = MyWindow() demo.show() app.exec_()
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================