Skip to content

Commit 96745be

Browse files
author
maicss
committed
更新和校对了前两章。
添加了源教程的备份。 添加了一些图片
1 parent 63df4ab commit 96745be

11 files changed

+1262
-93
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ PyQt5中文教程,翻译自 [zetcode](http://zetcode.com/gui/pyqt5/)
1515

1616
计划:
1717

18-
- [ ] 先大致翻译一遍
18+
- [x] 先大致翻译一遍
19+
- [ ] 最近填坑的时候发现源文档更新了,现在更新翻译
1920
- [ ] 统一称呼,检查错别字,检查格式
2021
- [ ] 添加原来没有的图片,统一添加Windows的,然后注解跟Mac不一样的地方
2122
- [ ] 文本润色
2223

2324
翻译吐槽:
2425

2526
- label这个词好难翻译,有时候就是个占位符的意思,说是文字说明吧,有专门的词caption,但是像checkbox的名称这种的,不是文字说明又是啥...,但是居然还用label说图标这种事情,也是醉了。
27+
- 源文档更新了,但是没有更新日志,只能一段段的比对……长了记性,创建了一个源文档的文件,下次直接copy的时候用VCS对比就可以了。
28+
- 更新了一些图片,主要是原来没有的。因为手头没有Windows,而且源文档的图片也是不是Windows10,都不是一个风格的,凑合着看吧……
2629

hello_world.md

Lines changed: 73 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
##本章学习Qt的基本功能
44

5-
6-
这个简单的小例子展示的是一个小窗口。但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现。这在很多应用中很常见,没必要每次都要重写这部分代码,Qt已经提供了这些功能。PyQt5是一个高级的工具集合,相比使用低级的工具,PyQt能省略上百行代码。
7-
85
## 例1,简单的窗口
96

10-
``` python
7+
这个简单的小例子展示的是一个小窗口。但是我们可以在这个小窗口上面做很多事情,改变大小,最大化,最小化等,这需要很多代码才能实现。这在很多应用中很常见,没必要每次都要重写这部分代码,Qt已经提供了这些功能。PyQt5是一个高级的工具集合,相比使用低级的工具,能省略上百行代码。
8+
9+
```python
1110
#!/usr/bin/python3
1211
# -*- coding: utf-8 -*-
1312

@@ -19,7 +18,7 @@ window in PyQt5.
1918
2019
author: Jan Bodnar
2120
website: zetcode.com
22-
last edited: January 2015
21+
Last edited: August 2017
2322
"""
2423

2524
import sys
@@ -38,7 +37,7 @@ if __name__ == '__main__':
3837

3938
sys.exit(app.exec_())
4039
```
41-
运行上面的代码,能展示出一个小窗口。下面是每行代码的讲解。
40+
运行上面的代码,能展示出一个小窗口。
4241
```
4342
import sys
4443
from PyQt5.QtWidgets import QApplication, QWidget
@@ -51,7 +50,7 @@ app = QApplication(sys.argv)
5150
```
5251
w = QWidget()
5352
```
54-
QWidget空间是一个用户界面的基本空间,它提供了基本的应用构造器。默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window)。
53+
QWidge控件是一个用户界面的基本控件,它提供了基本的应用构造器。默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window)。
5554
```
5655
w.resize(250, 150)
5756
```
@@ -63,17 +62,17 @@ move()是修改控件位置的的方法。它把控件放置到屏幕坐标的(3
6362
```
6463
w.setWindowTitle('Simple')
6564
```
66-
我们给这个窗口添加了一个标题,标题在标题栏展示(虽然这看起来是一句废话,但是后面还有很多栏,还是要注意一下,多了就蒙了)。
65+
我们给这个窗口添加了一个标题,标题在标题栏展示(虽然这看起来是一句废话,但是后面还有各种栏,还是要注意一下,多了就蒙了)。
6766
```
6867
w.show()
6968
```
7069
show()能让控件在桌面上显示出来。控件在内存里创建,之后才能在显示器上显示出来。
7170
```
7271
sys.exit(app.exec_())
7372
```
74-
最后,我们进入了应用的主循环中,事件处理器这个时候开始工作。主循环从窗口上接收事件,并把事件传入到派发到应用控件里。当调用exit()方法或直接销毁主控件时,主循环就会结束。sys.exit()方法能确保主循环安全退出。外部环境能通知主控件怎么结束。
73+
最后,我们进入了应用的主循环中,事件处理器这个时候开始工作。主循环从窗口上接收事件,并把事件传入到派发到应用控件里。当调用`exit()`方法或直接销毁主控件时,主循环就会结束。`sys.exit()`方法能确保主循环安全退出。外部环境能通知主控件怎么结束。
7574

76-
exec_()之所以有个下划线,是因为exec是一个Python的关键字。
75+
`exec_()`之所以有个下划线,是因为exec是一个Python的关键字。
7776

7877
程序预览:
7978

@@ -82,6 +81,9 @@ exec_()之所以有个下划线,是因为exec是一个Python的关键字。
8281
## 例2,带窗口图标
8382

8483
窗口图标通常是显示在窗口的左上角,标题栏的最左边。下面的例子就是怎么用PyQt5创建一个这样的窗口。
84+
85+
在某些环境下,图标显示不出来。如果你遇到了这个问题,看我在Stackoverfolw的[回答](https://stackoverflow.com/questions/44080247/pyqt5-does-now-show-icons/45439678#45439678)
86+
8587
```python
8688
#!/usr/bin/python3
8789
# -*- coding: utf-8 -*-
@@ -92,9 +94,9 @@ ZetCode PyQt5 tutorial
9294
This example shows an icon
9395
in the titlebar of the window.
9496
95-
author: Jan Bodnar
96-
website: zetcode.com
97-
last edited: January 2015
97+
Author: Jan Bodnar
98+
Website: zetcode.com
99+
Last edited: August 2017
98100
"""
99101

100102
import sys
@@ -123,42 +125,54 @@ if __name__ == '__main__':
123125

124126
app = QApplication(sys.argv)
125127
ex = Example()
126-
sys.exit(app.exec_())
128+
sys.exit(app.exec_())
127129
```
130+
128131
前一个例子是使用的[过程式编程](https://www.wikiwand.com/zh/%E8%BF%87%E7%A8%8B%E5%BC%8F%E7%BC%96%E7%A8%8B)。Python还支持[面向对象](https://www.wikiwand.com/zh/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1)的编程:
132+
129133
```
130134
class Example(QWidget):
131135
132136
def __init__(self):
133137
super().__init__()
134138
...
135139
```
140+
136141
面向对象编程最重要的三个部分是类(class)、数据和方法。我们创建了一个类的调用,这个类继承自QWidget。这就意味着,我们调用了两个构造器,一个是这个类本身的,一个是这个类继承的。super()构造器方法返回父级的对象。`__init__()`方法是构造器的一个方法。
142+
137143
```
138144
self.initUI()
139145
```
146+
140147
使用`initUI()`方法创建一个GUI。
148+
141149
```
142150
# 自己准备一个web.png
143151
self.setGeometry(300, 300, 300, 220)
144152
self.setWindowTitle('Icon')
145153
self.setWindowIcon(QIcon('web.png'))
146154
```
147-
上面的三个方法都继承自`QWidget`类。setGeometry()有两个作用:把窗口放到屏幕上并且设置窗口大小。参数分别代表屏幕坐标的x、y和窗口大小的宽、高。也就是说这个方法是resize()和move()的合体。最后一个方法是添加了图标。先创建一个QIcon对象,然后接受一个路径作为参数显示图标。
155+
156+
上面的三个方法都继承自`QWidget`类。`setGeometry()`有两个作用:把窗口放到屏幕上并且设置窗口大小。参数分别代表屏幕坐标的x、y和窗口大小的宽、高。也就是说这个方法是`resize()``move()`的合体。最后一个方法是添加了图标。先创建一个QIcon对象,然后接受一个路径作为参数显示图标。
157+
158+
148159
```
149160
if __name__ == '__main__':
150161
151162
app = QApplication(sys.argv)
152163
ex = Example()
153164
sys.exit(app.exec_())
154-
````
165+
```
166+
155167
应用和示例的对象创立,主循环开始。
156168
程序预览:
157169

158170
![icon](./images/1-icon.png)
159171

172+
160173
## 例3,提示框
161-
```
174+
175+
```python
162176
#!/usr/bin/python3
163177
# -*- coding: utf-8 -*-
164178

@@ -168,9 +182,9 @@ ZetCode PyQt5 tutorial
168182
This example shows a tooltip on
169183
a window and a button.
170184
171-
author: Jan Bodnar
172-
website: zetcode.com
173-
last edited: January 2015
185+
Author: Jan Bodnar
186+
Website: zetcode.com
187+
Last edited: August 2017
174188
"""
175189

176190
import sys
@@ -209,20 +223,24 @@ if __name__ == '__main__':
209223
ex = Example()
210224
sys.exit(app.exec_())
211225
```
212-
在这个例子中,我们为应用创建了两个提示框。
226+
在这个例子中,我们为应用创建了一个提示框。
227+
213228
```
214229
QToolTip.setFont(QFont('SansSerif', 10))
215230
```
216231
这个静态方法设置了提示框的字体,我们使用了10px的SansSerif字体。
232+
217233
```
218234
self.setToolTip('This is a <b>QWidget</b> widget')
219235
```
220236
调用`setTooltip()`创建提示框可以使用富文本格式的内容。
237+
221238
```
222239
btn = QPushButton('Button', self)
223240
btn.setToolTip('This is a <b>QPushButton</b> widget')
224241
```
225-
创建了一个按钮,并且为按钮添加了一个提示框。
242+
创建一个按钮,并且为按钮添加了一个提示框。
243+
226244
```
227245
btn.resize(btn.sizeHint())
228246
btn.move(50, 50)
@@ -241,8 +259,9 @@ btn.move(50, 50)
241259
```
242260
QPushButton(string text, QWidget parent = None)
243261
```
244-
text参数是想要显示的按钮名称,parent参数是放在按钮上的组件,在我们的 例子里,这个参数是QWidget。应用中的组件都是一层一层(继承而来的?)的,在这个层里,大部分的组件都有自己的父级,没有父级的组件,是顶级的窗口。
245-
```
262+
`text`参数是想要显示的按钮名称,`parent`参数是放在按钮上的组件,在我们的 例子里,这个参数是`QWidget`。应用中的组件都是一层一层(继承而来的?)的,在这个层里,大部分的组件都有自己的父级,没有父级的组件,是顶级的窗口。
263+
264+
```python
246265
#!/usr/bin/python3
247266
# -*- coding: utf-8 -*-
248267

@@ -253,9 +272,9 @@ This program creates a quit
253272
button. When we press the button,
254273
the application terminates.
255274
256-
author: Jan Bodnar
257-
website: zetcode.com
258-
last edited: January 2015
275+
Author: Jan Bodnar
276+
Website: zetcode.com
277+
Last edited: August 2017
259278
"""
260279

261280
import sys
@@ -290,18 +309,21 @@ if __name__ == '__main__':
290309
sys.exit(app.exec_())
291310
```
292311
这里创建了一个点击之后就退出窗口的按钮。
312+
293313
```
294314
from PyQt5.QtCore import QCoreApplication
295315
```
296316
程序需要QtCore对象。
317+
297318
```
298319
qbtn = QPushButton('Quit', self)
299320
```
300-
创建一个继承自`QPushButton`的按钮。第一个参数是按钮的文本,第二个参数是按钮的父级组件,这个例子中,父级组件就是我们创建的继承自Qwidget的Example类。
321+
创建一个继承自`QPushButton`的按钮。第一个参数是按钮的文本,第二个参数是按钮的父级组件,这个例子中,父级组件就是我们创建的继承自`Qwidget``Example`类。
322+
301323
```
302324
qbtn.clicked.connect(QCoreApplication.instance().quit)
303325
```
304-
事件传递系统在PyQt5内建的single和slot机制里面。点击按钮之后,信号会被捕捉并给出既定的反应。QCoreApplication包含了事件的主循环,它能添加和删除所有的事件,instance()创建了一个它的实例。QCoreApplication是在QApplication里创建的。 点击事件和能终止进程并退出应用的quit函数绑定在了一起。在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。
326+
事件传递系统在PyQt5内建的single和slot机制里面。点击按钮之后,信号会被捕捉并给出既定的反应。`QCoreApplication`包含了事件的主循环,它能添加和删除所有的事件,`instance()`创建了一个它的实例。`QCoreApplication`是在`QApplication`里创建的。 点击事件和能终止进程并退出应用的quit函数绑定在了一起。在发送者和接受者之间建立了通讯,发送者就是按钮,接受者就是应用对象。
305327

306328
程序预览:
307329

@@ -310,7 +332,8 @@ qbtn.clicked.connect(QCoreApplication.instance().quit)
310332
## 例5,消息盒子
311333

312334
默认情况下,我们点击标题栏的×按钮,QWidget就会关闭。但是有时候,我们修改默认行为。比如,如果我们打开的是一个文本编辑器,并且做了一些修改,我们就会想在关闭按钮的时候让用户进一步确认操作。
313-
```
335+
336+
```python
314337
#!/usr/bin/python3
315338
# -*- coding: utf-8 -*-
316339

@@ -321,9 +344,9 @@ This program shows a confirmation
321344
message box when we click on the close
322345
button of the application window.
323346
324-
author: Jan Bodnar
325-
website: zetcode.com
326-
last edited: January 2015
347+
Author: Jan Bodnar
348+
Website: zetcode.com
349+
Last edited: August 2017
327350
"""
328351

329352
import sys
@@ -363,13 +386,15 @@ if __name__ == '__main__':
363386
ex = Example()
364387
sys.exit(app.exec_())
365388
```
366-
如果关闭QWidget,就会产生一个QCloseEvent。改变空间的默认行为,就是替换掉默认的事件处理。
389+
如果关闭QWidget,就会产生一个QCloseEvent。改变控件的默认行为,就是替换掉默认的事件处理。
390+
367391
```
368392
reply = QMessageBox.question(self, 'Message',
369393
"Are you sure to quit?", QMessageBox.Yes |
370394
QMessageBox.No, QMessageBox.No)
371395
```
372396
我们创建了一个消息框,上面有俩按钮:Yes和No.第一个字符串显示在消息框的标题栏,第二个字符串显示在对话框,第三个参数是消息框的俩按钮,最后一个参数是默认按钮,这个按钮是默认选中的。返回值在变量`reply`里。
397+
373398
```
374399
if reply == QtGui.QMessageBox.Yes:
375400
event.accept()
@@ -384,7 +409,7 @@ else:
384409

385410
## 例6,窗口居中
386411

387-
```
412+
```python
388413
#!/usr/bin/python3
389414
# -*- coding: utf-8 -*-
390415

@@ -394,9 +419,9 @@ ZetCode PyQt5 tutorial
394419
This program centers a window
395420
on the screen.
396421
397-
author: Jan Bodnar
398-
website: zetcode.com
399-
last edited: January 2015
422+
Author: Jan Bodnar
423+
Website: zetcode.com
424+
Last edited: August 2017
400425
"""
401426

402427
import sys
@@ -434,30 +459,34 @@ if __name__ == '__main__':
434459
ex = Example()
435460
sys.exit(app.exec_())
436461
```
437-
QtGui.QDesktopWidget类提供了用户的桌面信息,其中就有屏幕的大小
462+
`QtGui.QDesktopWidget`提供了用户的桌面信息,包括屏幕的大小
438463

439464
```
440465
self.center()
441466
```
442467

443468
这个方法是调用我们下面写的,实现对话框居中的方法。
469+
444470
```
445471
qr = self.frameGeometry()
446472
```
447-
这样我们得到了主窗口的大小。
473+
得到了主窗口的大小。
474+
448475
```
449476
cp = QDesktopWidget().availableGeometry().center()
450477
```
451-
获取到显示器的分辨率,然后得到了中间点的位置。
478+
获取显示器的分辨率,然后得到中间点的位置。
479+
452480
```
453481
qr.moveCenter(cp)
454482
```
455483
然后把自己窗口的中心点放置到qr的中心点。
484+
456485
```
457486
self.move(qr.topLeft())
458487
```
459-
然后把窗口的坐上角移动到qr的矩形的左上角上,这样就居中了我们自己的窗口
488+
然后把窗口的坐上角的坐标设置为qr的矩形左上角的坐标,这样就把窗口居中了
460489

461-
- [ ] TODO:这个翻译的好扯
490+
程序预览:
462491

463-
**这个例子没有程序预览**
492+
![center](./images/1-center.png)

images/1-center.png

13 KB
Loading

images/2-checkmenu.png

9.47 KB
Loading

images/2-contextmenu.png

12.8 KB
Loading

images/2-menu.png

17.7 KB
Loading

images/2-status.png

17 KB
Loading

images/2-submenu.png

9.05 KB
Loading

0 commit comments

Comments
 (0)