PyQt基本操作

twaby47sq 8年前

来自: http://www.cnblogs.com/rollenholt/archive/2011/11/16/2251904.html


PyQt的简介和基本安装方法读者可以自行google解决。先声明,本文章教基础,参考《征服Python》相关章节。不过不得不说,pyQt的教程真的好少,╮(╯▽╰)╭,悲催,大家有什么好的资料推荐一下,谢谢了。

先建立一个基本的界面看看:

1
2
3
4
5
6
7
8
9
10
11
12
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_()
    

 运行结果:

然后我们添加一个标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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_()

 效果如下:

基本布局:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#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_()

 效果:

按钮基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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_()