<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=PyQt5_hello_world</id>
	<title>PyQt5 hello world - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.riguz.com/index.php?action=history&amp;feed=atom&amp;title=PyQt5_hello_world"/>
	<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;action=history"/>
	<updated>2026-06-02T19:18:18Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3751&amp;oldid=prev</id>
		<title>Riguz：​Riguz移动页面Blog:PyQt5入门小程序至PyQt5 hello world，不留重定向</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3751&amp;oldid=prev"/>
		<updated>2023-12-19T05:43:38Z</updated>

		<summary type="html">&lt;p&gt;Riguz移动页面&lt;a href=&quot;/index.php?title=Blog:PyQt5%E5%85%A5%E9%97%A8%E5%B0%8F%E7%A8%8B%E5%BA%8F&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Blog:PyQt5入门小程序（页面不存在）&quot;&gt;Blog:PyQt5入门小程序&lt;/a&gt;至&lt;a href=&quot;/PyQt5_hello_world&quot; title=&quot;PyQt5 hello world&quot;&gt;PyQt5 hello world&lt;/a&gt;，不留重定向&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年12月19日 (二) 05:43的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;zh-Hans-CN&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;（没有差异）&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki_db:diff:1.41:old-3750:rev-3751 --&gt;
&lt;/table&gt;</summary>
		<author><name>Riguz</name></author>
	</entry>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3750&amp;oldid=prev</id>
		<title>2023年12月19日 (二) 05:43 Riguz</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3750&amp;oldid=prev"/>
		<updated>2023-12-19T05:43:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年12月19日 (二) 05:43的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DISPLAYNAME&lt;/del&gt;:PyQt5入门小程序}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DISPLAYTITLE&lt;/ins&gt;:PyQt5入门小程序}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_db:diff:1.41:old-3749:rev-3750:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Riguz</name></author>
	</entry>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3749&amp;oldid=prev</id>
		<title>2023年12月19日 (二) 05:42 Riguz</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=3749&amp;oldid=prev"/>
		<updated>2023-12-19T05:42:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年12月19日 (二) 05:42的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;第1行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第1行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{DISPLAYNAME:PyQt5入门小程序}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wiki_db:diff:1.41:old-2483:rev-3749:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Riguz</name></author>
	</entry>
	<entry>
		<id>https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=2483&amp;oldid=prev</id>
		<title>imported&gt;Riguz：​最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。</title>
		<link rel="alternate" type="text/html" href="https://wiki.riguz.com/index.php?title=PyQt5_hello_world&amp;diff=2483&amp;oldid=prev"/>
		<updated>2020-05-13T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;最近有非计算机专业的同学想学PyQT，但是又不知道怎么搞，所以我做了一个简单的例子。这个例子是一个简单的图片显示器。这是一篇写给新人的入门文章，希望有所帮助。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Qt程序的基本结构=&lt;br /&gt;
跟其他程序一样，所有的程序都会有一个主入口，然后一行一行的调用代码，而GUI程序跟其他程序有一个区别就是，只有你显示的关闭界面，程序才会退出。所以整个GUI的程序大致会是这样一个原理（下面是伪代码，不是实际的程序）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
void main() {&lt;br /&gt;
    while(true) {&lt;br /&gt;
        command = fetch_user_input_event()&lt;br /&gt;
        if(command == quit):&lt;br /&gt;
            exit();&lt;br /&gt;
        else&lt;br /&gt;
            keep_rendering_ui&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
然而实际上不需要我们去操心这个，Qt框架会帮我们处理这个逻辑，一个Qt应用就是这样：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    window = MainWindow()&lt;br /&gt;
    window.show()         # 必须显示的调用，显示一个界面&lt;br /&gt;
    app.exec_()           # 等待程序退出，否则界面一闪而过&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= UI绘制=&lt;br /&gt;
UI绘制十分简单，我们的程序最终的样子是这样：&lt;br /&gt;
&lt;br /&gt;
[[File:PyQt_image_viewer.png|600px|Image viewer]]&lt;br /&gt;
&lt;br /&gt;
一个比较典型的桌面程序，一个主界面包含菜单栏、工具栏、主界面，状态栏没有。这些都好理解，而另一个比较重要的概念是布局，就是控件在UI上怎么摆放（尤其是UI可能会缩放），通常不会是写死的位置，而是由布局管理器来管理。简而言之，就是定义规则，你的控件怎么放，窗口缩放的时候，怎么处理。&lt;br /&gt;
&lt;br /&gt;
== 主窗口==&lt;br /&gt;
所以首先我们定义出主窗口。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
class MainWindow(QMainWindow):&lt;br /&gt;
    def __init__(self, *args, **kwargs):&lt;br /&gt;
        super(MainWindow, self).__init__(*args, **kwargs)&lt;br /&gt;
        self.setWindowTitle(&amp;#039;Simple image editor&amp;#039;)&lt;br /&gt;
        self.setFixedSize(640, 480) # 固定大小的窗口，禁止缩放&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
实际上你可以直接显示一个其他控件例如QWidget, QLabel等，它们只是控件级别，而主窗口包含菜单、状态栏等，更适合制作程序UI。然后我们主界面的控件只有一个，那就是显示图片。图片可以使用QLabel显示，虽然它更多用来显示文字：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 在Qt里面，每一个控件都可以指定父控件，更多的是因为C++中需要自动管理内存&lt;br /&gt;
# 当父控件销毁时，子控件跟着销毁，所以把self（主窗口）传给主窗口上的控件&lt;br /&gt;
self.imageContainer = QLabel(self)&lt;br /&gt;
self.imageContainer.setAlignment(Qt.AlignCenter)&lt;br /&gt;
&lt;br /&gt;
# qt可以写css来设置样式&lt;br /&gt;
self.imageContainer.setStyleSheet(&amp;#039;background-image:url(background.jpg);&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# 将图片设置为中心控件&lt;br /&gt;
self.setCentralWidget(self.imageContainer)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 创建菜单和工具栏==&lt;br /&gt;
菜单通过`self.menuBar`得到。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
menu = self.menuBar()&lt;br /&gt;
# 是否使用系统菜单，如果是mac，不设置的话菜单会在屏幕顶上&lt;br /&gt;
menu.setNativeMenuBar(False)&lt;br /&gt;
aboutMenu = menu.addMenu(&amp;#039;&amp;amp;关于&amp;#039;)&lt;br /&gt;
aboutMenu.addAction(aboutAction) &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
工具栏跟菜单很类似，工具栏上的按钮都是一个Action，如果希望放进去别的控件可以用`addWidget`实现&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 创建一个新的工具栏，可以创建多个&lt;br /&gt;
self.toolbar = self.addToolBar(&amp;#039;Operations&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# 图标按钮&lt;br /&gt;
zoomInAction = QAction(QIcon(&amp;#039;zengjia.svg&amp;#039;), &amp;#039;放大&amp;#039;, self)&lt;br /&gt;
self.toolbar.addAction(zoomInAction)&lt;br /&gt;
&lt;br /&gt;
# 非按钮控件&lt;br /&gt;
slider = QSlider(Qt.Horizontal)&lt;br /&gt;
slider.setFixedWidth(200)&lt;br /&gt;
self.toolbar.addWidget(slider)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 事件响应=&lt;br /&gt;
Qt是信号（Signal）/槽（Slot）机制，简单来说就是用户对界面的更改会产生事件，而事件由槽来处理，两者之间需要关联（connect）上才能正确处理。比如菜单的处理：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
aboutAction = QAction(&amp;#039;&amp;amp;版本&amp;#039;, self)&lt;br /&gt;
aboutAction.setShortcut(&amp;#039;Ctrl+A&amp;#039;)&lt;br /&gt;
# triggered事件 关联到槽，槽就是一个函数&lt;br /&gt;
aboutAction.triggered.connect(self.onAbout)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有时候事件是会有参数的，比如滑块变化的时候，值是可以得到的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
slider = QSlider(Qt.Horizontal)&lt;br /&gt;
slider.setFixedWidth(200)&lt;br /&gt;
slider.setValue(100)&lt;br /&gt;
slider.valueChanged.connect(self.onChangeBrightness)&lt;br /&gt;
&lt;br /&gt;
# 槽&lt;br /&gt;
def onChangeBrightness(self, value):&lt;br /&gt;
    # 这个value就是变化后的值（默认0-100）&lt;br /&gt;
    pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 图片处理=&lt;br /&gt;
&lt;br /&gt;
== 放大缩小==&lt;br /&gt;
&lt;br /&gt;
方法和缩小通过QPixmap.scaled来实现，我们通过将图片缩放到一个期望的大小（保持宽高比），来显示到界面上：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 scaledImage = rotatedImage.scaled(self.imageSize.width(), self.imageSize.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation)&lt;br /&gt;
self.imageContainer.setPixmap(scaledImage)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
而缩放的时候，实际上就是在控制这个大小：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 一开始给定一个默认的大小&lt;br /&gt;
self.imageSize = QSize(300, 200)&lt;br /&gt;
&lt;br /&gt;
def onZoomOut(self):&lt;br /&gt;
    # 缩小按0.5计算，扩大按照乘以1.5计算&lt;br /&gt;
    self.imageSize *= 0.5&lt;br /&gt;
    self.refreshImage()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 旋转==&lt;br /&gt;
旋转需要记录一个旋转角度，然后通过Qtransform来实现：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
transform = QTransform()&lt;br /&gt;
transform.rotate(self.rotateAngle)&lt;br /&gt;
rotatedImage = self.image.transformed(transform)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
这样可以得到一个新的QPixmap，就是旋转后的图片。&lt;br /&gt;
&lt;br /&gt;
== 调节亮度==&lt;br /&gt;
亮度调节就比较麻烦了，图片的亮度调节需要在HSL的颜色空间下处理（我们比较熟悉的一帮是RGB三色表示）。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# 将QPixmap转为QImage，以便可以直接操作像素&lt;br /&gt;
image = self.rawImage.toImage()&lt;br /&gt;
for i in range(0, image.width()):&lt;br /&gt;
    for j in range(0, image.height()):&lt;br /&gt;
        # 取到(i, j)位置的像素点&lt;br /&gt;
        color = QColor(image.pixelColor(i, j))&lt;br /&gt;
&lt;br /&gt;
        # 取到HSL空间下的像素值&lt;br /&gt;
        (h, s, l, a) = color.getHsl()&lt;br /&gt;
&lt;br /&gt;
        # 计算调整后的亮度值并更新，更新的时候转成了rgb&lt;br /&gt;
        newBrightless = l * (value/100.0)&lt;br /&gt;
        color.setHsl(h, s, newBrightless, a)&lt;br /&gt;
        image.setPixel(i, j, color.rgb())&lt;br /&gt;
self.image = QPixmap.fromImage(image)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
以上就是一个简单的例子，完整的程序[/images/ImageEditor.zip 下载]：&lt;/div&gt;</summary>
		<author><name>imported&gt;Riguz</name></author>
	</entry>
</feed>