Linux ls 用法與範例

本篇 ShengYu 介紹 Linux ls 的用法與範例。

以下 Linux ls 的內容將分為這幾部份,

  • Linux ls 列出檔案與目錄並顯示大小
  • Linux ls 只列出目錄(排除檔案)
  • Linux ls 只列出檔案(排除目錄)

Linux ls 列出檔案與目錄並顯示大小

1
2
3
$ ls -al
drwxrwxr-x 2 shengyu shengyu 4096 Oct 27 22:00 myfolder
-rw-rw-r-- 1 shengyu shengyu 3054 Oct 27 22:00 note.txt

你也可以加上 h 引數,讓檔案大小看得更好懂更人性化一點,

1
2
3
$ ls -alh
drwxrwxr-x 2 shengyu shengyu 4.0K Oct 27 22:00 myfolder
-rw-rw-r-- 1 shengyu shengyu 3.0K Oct 27 22:00 note.txt

Linux ls 只列出目錄(排除檔案)

linux ls 指令加上 -d 參數就可以只列出目錄,

1
2
$ ls -d
drwxrwxr-x 2 shengyu shengyu 4.0K Oct 27 22:00 myfolder

你也可以用 ls 搭配 grep 篩選出目錄來,目錄為 drwxrwxr-x 開頭的形式,所以我們就過濾只列出行首 d 開頭的就可以了,指令如下,^d 表示行首以 d 開頭,

1
2
$ ls -l | grep ^d
drwxrwxr-x 2 shengyu shengyu 4.0K Oct 27 22:00 myfolder

Linux ls 只列出檔案(排除目錄)

這邊介紹 ls 不列出資料夾只列出檔案的方法,ls 沒有什麼參數可以直接排除目錄只列出檔案的,所以我們這邊透過 grep 的技巧達成,先用 ls -al 後再讓 grep 去排除行首為 d 的那些行(目錄為 drwxrwxr-x),

1
2
$ ls -l | grep -v ^d
-rw-rw-r-- 1 shengyu shengyu 3054 Oct 27 22:00 note.txt

或者 ls -l | grep ^[^d] 也可以,^[^d] 表示行首不以 d 開頭,

以上就是 Linux ls 用法與範例的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
Linux 常用指令教學懶人包
Linux cut 字串處理用法與範例
Linux sed 字串取代用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux du 查詢硬碟剩餘空間/資料夾容量用法與範例
Linux wget 下載檔案用法與範例

Python str.find() 用法與範例

本篇 ShengYu 要介紹 Python str.find() 用法與範例,搜尋字串是字串處理中經常使用到的功能,在 Python 中的 str 已經內建提供了 find() 成員函式可以使用。

Python 的 str.find() 定義如下,

1
str.find(sub[, start[, end]])

sub:要搜尋的字串
start:為開始搜尋的位置,預設從索引值 0 開始搜尋
end:結束搜尋的位置,預設為該字串 str 的尾端

如果有找到的話會回傳找到的索引位置,沒有找到的話則會回傳 -1,

不管是一個字元或一個字元以上都可以用 str.find(),假如搜尋的字串為一個字元以上,例如 wo ,有找到的話是回傳開始的索引值唷!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

s = 'hello world'
found = s.find('w')
print(found)
found = s.find('wo')
print(found)
found = s.find('wo', 3)
print(found)
found = s.find('wo', 9)
print(found)
found = s.find('x')
print(found)
found = s.find('xx')
print(found)

輸出結果如下,

1
2
3
4
5
6
6
6
6
-1
-1
-1

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python 新手入門教學懶人包
3 種 Python 字串搜尋並且忽略大小寫方法
4 種 Python 字串中搜尋關鍵字的方法
Python list 串列用法與範例
Python set 集合用法與範例
Python dict 字典用法與範例
Python tuple 元組用法與範例

Python PyQt5 QMessageBox 用法與範例

本篇 ShengYu 介紹 Python PyQt5 QMessageBox 用法與範例,在 Python GUI 程式設計中常常需要提出一個提示對話框告訴使用者一些訊息,例如:有錯誤發生或者離開程式前的確認對話框,所以這篇會大概地介紹常用的 QMessageBox 用法與範例。

以下的 Python PyQt5 QMessageBox 用法與範例將分為這幾部分,

  • PyQt5 QMessageBox 提示訊息對話框
  • PyQt5 QMessageBox 警告訊息對話框
  • PyQt5 QMessageBox 錯誤訊息對話框
  • PyQt5 QMessageBox 確定取消對話框

那就開始吧!

PyQt5 QMessageBox 提示訊息對話框

Python PyQt5 QMessageBox 提示訊息對話框基本用法如下,QMessageBox.information() 用來顯示一般資訊,如果第一個引數沒有父類別的 Widget 帶入可以使用 None,

python-pyqt-qmessagebox.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.information(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox2.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.information(self, 'my messagebox', 'hello world',
QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)
if reply == QMessageBox.Ok:
print('Ok clicked.')
self.mybutton.setText("Ok clicked.")
else:
print('Close clicked.')
self.mybutton.setText("Close clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.information() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox()
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Information)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Close)
msgbox.setDefaultButton(QMessageBox.Ok)
#msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 警告訊息對話框

PyQt5 要顯示警告訊息對話框的話用 QMessageBox.warning(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox3.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.warning(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox4.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.warning(self, 'my messagebox', 'hello world',
QMessageBox.Ok | QMessageBox.Close, QMessageBox.Close)
if reply == QMessageBox.Ok:
print('Ok clicked.')
self.mybutton.setText("Ok clicked.")
else:
print('Close clicked.')
self.mybutton.setText("Close clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.warning() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Warning)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Close)
msgbox.setDefaultButton(QMessageBox.Ok)
# msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 錯誤訊息對話框

PyQt5 要顯示錯誤訊息對話框的話用 messagebox.showerror(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox5.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.critical(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox6.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.critical(self, 'my messagebox', 'hello world',
QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore, QMessageBox.Retry)
if reply == QMessageBox.Retry:
print('Retry clicked.')
self.mybutton.setText("Retry clicked.")
elif reply == QMessageBox.Abort:
print('Abort clicked.')
self.mybutton.setText("Abort clicked.")
else:
print('Ignore clicked.')
self.mybutton.setText("Ignore clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.critical() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Critical)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Retry | QMessageBox.Abort | QMessageBox.Ignore)
msgbox.setDefaultButton(QMessageBox.Retry)
#msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

PyQt5 QMessageBox 確定取消對話框

PyQt5 要顯示確定取消訊息對話框的話用 messagebox.askokcancel(),如果第一個引數沒有父類別的 Widget 帶入可以使用 None,用法如下,

python-pyqt-qmessagebox7.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QMessageBox)

if __name__ == '__main__':
app = QApplication(sys.argv)
QMessageBox.question(None, 'my messagebox', 'hello world')

結果圖如下,

接下來示範有父類別的 Widget 的寫法,

python-pyqt-qmessagebox8.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('Button example')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('Button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
reply = QMessageBox.question(self, 'my messagebox', 'hello world',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
print('Yes clicked.')
self.mybutton.setText("Yes clicked.")
else:
print('No clicked.')
self.mybutton.setText("No clicked.")

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

除了直接使用 QMessageBox.question() 將所有引數都帶入以外還有另一種寫法,就是先宣告一個 QMessageBox 變數,在一個一個地去使用對應的函式,最後再使用 exec(),如下所示,

1
2
3
4
5
6
7
8
msgbox = QMessageBox(self)
msgbox.setWindowTitle('my messagebox')
msgbox.setIcon(QMessageBox.Question)
msgbox.setText('hello world')
msgbox.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
msgbox.setDefaultButton(QMessageBox.No)
# msgbox.setDetailedText('detail ...')
reply = msgbox.exec()

以上就是 Python PyQt5 QMessageBox 的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦

Python 新手入門教學懶人包
Python PyQt5 新手入門教學

Python PyQt5 QLineEdit 限制輸入數字

本篇 ShengYu 介紹 Python PyQt5 QLineEdit 限制輸入數字的方法。

PyQt5 QLineEdit 用 QIntValidator 限制輸入數字

這邊就以簡單的數學問題回答為例,需要限制使用者只能在 QLineEdit 裡輸入數字,
PyQt5 QLineEdit 限制輸入數字的方式可以使用 QLineEdit.setValidator() 的方式驗證文字的類別,例如下例中的也就是下例中的 QIntValidator 就是專門驗證是不是整數的驗證器,範例如下,

python-pyqt-qlineedit-number-only.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel, QPushButton, QMessageBox)
from PyQt5.QtGui import QIntValidator

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('1+1=', self)
gridlayout.addWidget(self.mylabel, 0, 0)

self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)
self.mylineedit.setValidator(QIntValidator()) # only int

self.mybutton = QPushButton('完成', self)
gridlayout.addWidget(self.mybutton, 1, 0, 1, 2)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
# print(self.mylineedit.text())
if self.mylineedit.text() == '':
QMessageBox.about(self, 'message', '未輸入答案')
elif self.mylineedit.text() == '2':
QMessageBox.about(self, 'message', '答對了')
else:
QMessageBox.about(self, 'message', '答錯了')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,實際操作可以發現只能輸入數字,無法輸入數字以外的文字,

QIntValidator() 還能限制你輸入的整數範圍,例如 0~255,改寫成這樣即可,

1
self.mylineedit.setValidator(QIntValidator(0, 255)) # 0~255

以及限制使用者只能輸入 double 數字,改寫成這樣即可,

1
2
3
from PyQt5.QtGui import QDoubleValidator
# ...
self.mylineedit.setValidator(QDoubleValidator()) # only double

PyQt5 QLineEdit 用 QRegExpValidator 正規表達式來限制輸入數字

這邊我們使用 QRegExpValidator 搭配正規標達式來作數字的驗證器,在這裡你也可以客製化一些其它規則,本範例先示範限制數字,

python-pyqt-qlineedit-number-only2.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel, QPushButton, QMessageBox)
from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtCore import QRegExp

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('1+1=', self)
gridlayout.addWidget(self.mylabel, 0, 0)

self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)
myregexp = QRegExp('[0-9]+')
myvalidator = QRegExpValidator(myregexp, self.mylineedit)
self.mylineedit.setValidator(myvalidator)

self.mybutton = QPushButton('完成', self)
gridlayout.addWidget(self.mybutton, 1, 0, 1, 2)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
# print(self.mylineedit.text())
if self.mylineedit.text() == '':
QMessageBox.about(self, 'message', '未輸入答案')
elif self.mylineedit.text() == '2':
QMessageBox.about(self, 'message', '答對了')
else:
QMessageBox.about(self, 'message', '答錯了')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

其它相關文章推薦
Python PyQt5 QLineEdit 文字框用法與範例
Python 新手入門教學懶人包
Python PyQt5 新手入門教學

Python PyQt5 QLineEdit 文字輸入框用法與範例

本篇 ShengYu 介紹 Python PyQt5 QLineEdit 用法與範例,Python GUI 程式設計裡文字輸入框的處理是很基本且常用的功能,接下來就來學習怎麼用 PyQt5 建立 QLineEdit 吧!

以下的 Python PyQt5 QLineEdit 用法與範例將分為這幾部分,

  • PyQt5 QLineEdit 基本用法
  • PyQt5 取得 QLineEdit 的輸入文字
  • PyQt5 QLineEdit 限制只能輸入數字
  • PyQt5 QLineEdit 使用替代符號隱藏輸入密碼

PyQt5 QLineEdit 基本用法

這邊示範 PyQt5 QLineEdit 基本用法,QLineEdit() 初始化完以後,先用 move() 移到想要顯示的座標位置,如下例中的 mylabel 移到左邊 (10,10) 座標,mylineedit 移到右邊 (60,10) 座標,這樣的手動排版比較土炮一點,下個範例會介紹怎麼用 QGridLayout 來進行 UI 排版,接下來就使用 self.show() 就可以完成初步的 PyQt5 QLineEdit 體驗囉!範例如下,

python-pyqt-qlineedit.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit, QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

self.mylabel = QLabel('Name:', self)
self.mylabel.move(10, 10)

self.mylineedit = QLineEdit(self)
self.mylineedit.move(60, 10)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

PyQt5 取得 QLineEdit 的輸入文字

PyQt5 取得 QLineEdit 的輸入文字可以用 QLineEdit.text() 的方式,如下例子中的 mylineedit.text(),這邊示範按下按鈕時將 QLineEdit 裡的文字取出來後,並且設定成 mybutton 顯示的文字,

python-pyqt-qlineedit2.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 80)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('Name:', self)
gridlayout.addWidget(self.mylabel, 0, 0)

self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)

self.mybutton = QPushButton('button', self)
gridlayout.addWidget(self.mybutton, 1, 0, 1, 2)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
#print(self.mylineedit.text())
if self.mylineedit.text() != '':
self.mybutton.setText(self.mylineedit.text())

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

這邊就使用 QGridLayout 來進行 UI 排版就不使用 move 了,QGridLayout.addWidget() 的 3 種函式參數介紹如下,

1
2
3
QGridLayout.addWidget(QWidget)
QGridLayout.addWidget(QWidget, int row, int column, Qt.Alignment alignment=0)
QGridLayout.addWidget(QWidget, int row, int column, int rowSpan, int columnSpan, Qt.Alignment alignment=0)

把 mylabel 放到 (0,0) 的位置,把 mylineedit 放到 (0,1) 的位置,把 mybutton 放到 (1,0) 的位置並且第 4 個引數 columnSpan 延伸為 2,

輸入文字且按下按鈕的結果圖如下,

這邊改用另一個例子,我們寫一個簡單的數學問題,讓使用者來回答,
取得 QLineEdit 的輸入文字後進行判斷,並且用 QMessageBox 來回應使用者,答案正確的話就用顯示”答對了”在 messagebox 上,

python-pyqt-qlineedit3.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel, QPushButton, QMessageBox)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 80)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('1+1=', self)
gridlayout.addWidget(self.mylabel, 0, 0)

self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)

self.mybutton = QPushButton('完成', self)
gridlayout.addWidget(self.mybutton, 1, 0, 1, 2)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
#print(self.mylineedit.text())
if self.mylineedit.text() == '':
QMessageBox.about(self, 'message', '未輸入答案')
elif self.mylineedit.text() == '2':
QMessageBox.about(self, 'message', '答對了')
else:
QMessageBox.about(self, 'message', '答錯了')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

關於 QMessageBox 的詳細用法可以看這篇介紹。

PyQt5 QLineEdit 限制只能輸入數字

這邊介紹蠻常使用到的功能,就是限制使用者只能在 QLineEdit 裡輸入數字,需要在 mylineedit 設定一個 QIntValidator() 它會去驗證輸入的文字是不是整數,本例中是限制使用者只能輸入數字,用法如下,

python-pyqt-qlineedit4.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel)
from PyQt5.QtGui import QIntValidator

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('Name:', self)
gridlayout.addWidget(self.mylabel, 0, 0)

self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)
self.mylineedit.setValidator(QIntValidator()) # only int

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

QIntValidator() 還能限制你輸入的整數範圍,例如 0~255,以及限制使用者只能輸入 double,這方面的詳細內容可以看 PyQt5 QLineEdit 限制輸入數字這篇介紹。

PyQt5 QLineEdit 使用替代符號隱藏輸入密碼

這邊示範一個登入視窗,裡面有兩個 QLineEdit,分別是要讓使用者輸入使用者名稱與密碼,我們希望使用者輸入的密碼不要用明碼顯示出來,取而代之的是用替代符號來顯示,那要怎麼作呢?就是在 QLineEdit.setEchoMode() 裡設定 QLineEdit.Password 參數,這樣輸入時就會顯示替代符號而不會顯示明碼了,範例如下,

python-pyqt-qlineedit5.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QLineEdit,
QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 240, 60)

gridlayout = QGridLayout()
self.setLayout(gridlayout)

self.mylabel = QLabel('Name:', self)
gridlayout.addWidget(self.mylabel, 0, 0)
self.mylineedit = QLineEdit(self)
gridlayout.addWidget(self.mylineedit, 0, 1)

self.mylabel2 = QLabel('Password:', self)
gridlayout.addWidget(self.mylabel2, 1, 0)
self.mylineedit2 = QLineEdit(self)
self.mylineedit2.setEchoMode(QLineEdit.Password)
gridlayout.addWidget(self.mylineedit2, 1, 1)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

以上就是 Python PyQt5 QLineEdit 文字輸入框的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
下一篇將會介紹 PyQt5 QComboBox 下拉式選單用法與範例

其它相關文章推薦
Python QLabel 標籤用法與範例
Python QPushButton 按鈕用法與範例
Python 新手入門教學懶人包
Python PyQt5 新手入門教學

Python PyQt5 QPushButton 按鈕用法與範例

本篇 ShengYu 介紹 Python PyQt5 QPushButton 按鈕用法與範例,Python GUI 程式設計最基本的就是建立按鈕與顯示按鈕以及處理按鈕事件,接下來就來學習怎麼用 PyQt5 建立 QPushButton 吧!

以下的 Python PyQt5 QPushButton 用法與範例將分為這幾部分,

  • PyQt5 建立按鈕 QPushButton
  • PyQt5 觸發按鈕事件來修改按鈕文字
  • PyQt5 改變按鈕顏色
  • PyQt5 改變按鈕大小
  • PyQt5 多個按鈕綁定同一個按鈕事件
  • PyQt5 QPushButton 搭配 lambda 運算式寫法

PyQt5 建立按鈕 QPushButton

PyQt5 QPushButton 的用法如下,一開始先用 QPushButton 建立一個按鈕,給這個按鈕一個顯示的文字 button,再用一個變數 mybutton 來儲存回傳的 QPushButton,先用 move() 移到想要顯示的座標位置,這樣的手動排版比較土炮一點,之後的範例會介紹怎麼用 QGridLayout 來進行 UI 排版,

python-pyqt-qpushbutton.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('button', self)
self.mybutton.move(60, 50)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

PyQt5 觸發按鈕事件來修改按鈕文字

這邊要示範 PyQt5 觸發 QPushButton 按鈕事件來修改按鈕文字,新增一個函式為 onButtonClick,並用 mybutton.clicked.connect() 設定 slot 為 onButtonClick,而事件發生時就會呼叫到 onButtonClick 以便處理按下該按鈕時要處理的邏輯,

python-pyqt-qpushbutton2.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
self.mybutton.setText('hello world')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

點擊 button 後的結果圖如下,

PyQt5 改變按鈕顏色

PyQt5 改變按鈕顏色的方法如下,改變按鈕的 StyleSheet 即可,這邊示範兩個按鈕,button 1 原本背景顏色是黃色,按下按鈕後背景顏色會改變成紅色,而 button 2 原本背景顏色是綠色,按下按鈕後背景顏色會改變成橘色,

python-pyqt-qpushbutton3.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

layout = QGridLayout()
self.setLayout(layout)

self.mybutton1 = QPushButton('button 1', self)
self.mybutton1.clicked.connect(self.onButton1Click)
self.mybutton1.setStyleSheet("background-color: yellow")
layout.addWidget(self.mybutton1, 0, 0)

self.mybutton2 = QPushButton('button 2', self)
self.mybutton2.clicked.connect(self.onButton2Click)
self.mybutton2.setStyleSheet("background-color: green")
layout.addWidget(self.mybutton2, 1, 0)

def onButton1Click(self):
self.mybutton1.setStyleSheet("background-color: red")
#self.mybutton1.setStyleSheet("background-color: #ff0000");
#self.mybutton1.setStyleSheet("background-color: rgb(255,0,0)");
self.mybutton1.setText('red button')

def onButton2Click(self):
self.mybutton2.setStyleSheet("background-color: orange")
self.mybutton2.setText('orange button')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

這邊就使用 QGridLayout 來進行 UI 排版就不使用 move 了,QGridLayout.addWidget() 的 3 種函式參數介紹如下,

1
2
3
QGridLayout.addWidget(QWidget)
QGridLayout.addWidget(QWidget, int row, int column, Qt.Alignment alignment=0)
QGridLayout.addWidget(QWidget, int row, int column, int rowSpan, int columnSpan, Qt.Alignment alignment=0)

把 mybutton1 放到 (0,0) 的位置,把 mybutton2 放到 (1,1) 的位置,

點擊 button 2 後的結果圖如下,

PyQt5 改變按鈕大小

這邊示範 PyQt5 改變按鈕大小的用法,修改按鈕的 Geometry 即可,setGeometry() 的第 3 個引數為按鈕的寬度,第 4 個引數為按鈕的高度,

python-pyqt-qpushbutton4.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton1 = QPushButton('button 1', self)
self.mybutton1.clicked.connect(self.onButton1Click)
self.mybutton1.move(60, 10)

self.mybutton2 = QPushButton('button 2', self)
self.mybutton2.clicked.connect(self.onButton2Click)
self.mybutton2.move(60, 50)

def onButton1Click(self):
self.mybutton1.setGeometry(60, 10, 100, 40)

def onButton2Click(self):
self.mybutton2.setGeometry(60, 50, 100, 60)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

點擊 button 1 後的結果圖如下,

PyQt5 多個按鈕綁定同一個按鈕事件

這邊示範 PyQt5 多個按鈕綁定同一個按鈕事件,先建立完四個按鈕與綁定到 onButtonClick() 同一個函式處理事件,同時這四個按鈕分別用 setObjectName() 設定各自的物件名稱,之後就可以在 onButtonClick()self.sender().objectName() 來判斷是哪一個按鈕,或者也可以用另外一種方式是用 self.sender() 直接跟該按鈕變數比對是否相同,範例如下,

python-pyqt-qpushbutton5.py
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
52
53
54
55
56
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QPushButton)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

layout = QVBoxLayout()
self.setLayout(layout)

self.mybutton1 = QPushButton('button 1', self)
self.mybutton1.setObjectName('btn_1')
self.mybutton1.clicked.connect(self.onButtonClick)
layout.addWidget(self.mybutton1)

self.mybutton2 = QPushButton('button 2', self)
self.mybutton2.setObjectName('btn_2')
self.mybutton2.clicked.connect(self.onButtonClick)
layout.addWidget(self.mybutton2)

self.mybutton3 = QPushButton('button 3', self)
self.mybutton3.setObjectName('btn_3')
self.mybutton3.clicked.connect(self.onButtonClick)
layout.addWidget(self.mybutton3)

self.mybutton4 = QPushButton('button 4', self)
self.mybutton4.setObjectName('btn_4')
self.mybutton4.clicked.connect(self.onButtonClick)
layout.addWidget(self.mybutton4)

def onButtonClick(self):
sender = self.sender()
print('objectName = ' + sender.objectName())
if sender == self.mybutton1:
print('button 1 click')
elif sender == self.mybutton2:
print('button 2 click')
elif sender == self.mybutton3:
print('button 3 click')
elif sender == self.mybutton4:
print('button 4 click')
else:
print('? click')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,按下按鈕同時觀察訊息輸出以便了解程式邏輯,

分別按下 mybutton1 與 mybutton3 的訊息輸出如下,

1
2
3
4
objectName = btn_1
button 1 click
objectName = btn_3
button 3 click

PyQt5 QPushButton 搭配 lambda 運算式寫法

這邊介紹一下 PyQt5 QPushButton 搭配 lambda 運算式寫法,在某些時候事件處理函式裡僅僅只是一行程式碼時,就可以使用 lamdba 的寫法,這邊稍微簡單介紹一下,根據前述章節的觸發按鈕事件修改按鈕文字的例子來說,部份程式碼如下,

1
2
3
4
5
6
7
8
9
10
def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('button', self)
self.mybutton.move(60, 50)
self.mybutton.clicked.connect(self.onButtonClick)

def onButtonClick(self):
self.mybutton.setText('hello world')

如果我們改成 lambda 的寫法的話,就可以移除 onButtonClick 函式,改完後的完整範例如下,將 self.mybutton.setText('hello world') 操作寫在 self.mybutton.clicked.connect() 裡的 lambda 運算式裡,詳細的 Python lambda 用法可以參考這篇

python-pyqt-qpushbutton6.py
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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton)


class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mybutton = QPushButton('button', self)
self.mybutton.move(60, 50)
# self.mybutton.clicked.connect(self.onButtonClick)
self.mybutton.clicked.connect(
lambda: self.mybutton.setText('hello world')
)

# def onButtonClick(self):
# self.mybutton.setText('hello world')

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

當按鈕事件處理函式裡只有短短一行程式碼時,就是個運用 lamdba 好時機的例子,改用 lamba 不一定比較好,還有程式的擴充性與維護性需要自行衡量。

以上就是 Python PyQt5 QPushButton 按鈕的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
下一篇將會介紹 PyQt5 QLineEdit 文字輸入框用法與範例

其它相關文章推薦
Python 新手入門教學懶人包
Python PyQt5 新手入門教學

Python PyQt5 QLabel 標籤用法與範例

本篇 ShengYu 介紹 Python PyQt5 QLabel 標籤用法與範例,Python GUI 程式設計最基本的就是建立標籤與顯示標籤,趕快來學習怎麼用 PyQt5 建立 QLabel 吧!

以下的 Python PyQt5 QLabel 用法與範例將分為這幾部分,

  • PyQt5 建立標籤 QLabel
  • PyQt5 設定標籤字型大小
  • PyQt5 設定標籤大小
  • PyQt5 設定標籤背景顏色

PyQt5 建立標籤 QLabel

PyQt5 QLabel 的用法如下,一開始先用 QLabel 建立一個標籤,給這個標籤一個顯示的文字 hello world,再用一個變數 mylabel 來儲存回傳的 QLabel

python-pyqt-qlabel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mylabel = QLabel('hello world', self)
self.mylabel.move(60, 50)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

PyQt5 設定標籤字型大小

PyQt5 要設定標籤字型大小的用法如下,在 mylabel.setFont() 裡傳入 QFont,這邊示範字型為 Arial,字型大小為 18,

python-pyqt-qlabel2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)
from PyQt5.QtGui import QFont

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mylabel = QLabel('hello world', self)
self.mylabel.move(40, 50)
self.mylabel.setFont(QFont('Arial', 18))

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

PyQt5 設定標籤大小

PyQt5 要設定標籤大小的用法如下,在 mylabel.setGeometry() 裡第 3 個引數傳入寬度,第 4 個引數傳入高度,

python-pyqt-qlabel3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mylabel = QLabel('hello world', self)
self.mylabel.setGeometry(10, 10, 100, 60)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

PyQt5 設定標籤背景顏色

PyQt5 要設定標籤背景顏色的用法如下,在 mylabel.setStyleSheet() 裡設定 background-color 的屬性,這邊示範黃色,

python-pyqt-qlabel4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel)

class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.setWindowTitle('my window')
self.setGeometry(50, 50, 200, 150)

self.mylabel = QLabel('hello world', self)
self.mylabel.setStyleSheet("background-color: yellow")
#self.mylabel.setStyleSheet("background-color: #ffff00");
#self.mylabel.setStyleSheet("background-color: rgb(255,255,0)");

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWidget()
w.show()
sys.exit(app.exec_())

結果圖如下,

以上就是 Python PyQt5 QLabel 標籤的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
下一篇將會介紹 PyQt5 QPushButton 按鈕用法與範例

其它相關文章推薦
Python 新手入門教學懶人包
Python PyQt5 新手入門教學

Python copyfile 複製檔案用法與範例

本篇介紹 Python copyfile 複製檔案用法與範例。
以下範例是在 Python 3 環境下測試過。

在 Python 中要複製檔案可以使用 shutil.copyfile()
使用 shutil.copyfile 時,需先 import shutil

程式碼如下,

python-shutil-copyfile.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import shutil

src = 'old.txt'
dst = 'new.txt'
shutil.copyfile(src, dst)

也可以用 shutil.copyfile() 將檔案從某資料夾複製到另外一個新的資料夾,但是這個目的端的資料夾一定要存在否則會出現 IOError 錯誤,
可以先用 os.path.exists() 判斷資料夾是否存在,不存在的話用 os.mkdir() 建立這個資料夾即可,

python-shutil-copyfile2.py
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import shutil
import os

src = 'oldfolder/old.txt'
dst = 'newfolder/new.txt'

if not os.path.exists('newfolder'):
os.mkdir('newfolder')
shutil.copyfile(src, dst)

其它相關文章推薦
Python 判斷檢查檔案是否存在 os.path.isfile
Python 判斷資料夾是否存在 os.path.isdir
Python 判斷檢查路徑是否存在 exists
Python 去除空白與去除特殊字元 strip
Python 取出檔案名稱 basename
Python 取出目錄的路徑 dirname
Python 字串分割 split
Python 連接字串 join
Python 去除空白與去除特殊字元 strip

C/C++ rename 重新命名用法與範例

本篇 ShengYu 介紹 C/C++ rename 重新命名用法與範例,rename 是用來將檔案重新命名的函式,以下介紹如何使用 rename 函式。

C/C++ 可以使用 rename 來對檔案重新命名,或對目錄重新命名,要使用 rename 的話需要引入的標頭檔 <stdio.h>,如果要使用 C++ 的標頭檔則是引入 <cstdio>
rename 函式原型為

1
int rename(const char * oldname, const char * newname);

rename() 第一個引數為舊名稱,第二個引數為新名稱,執行成功的話會回傳 0,失敗的話會回傳非 0,來看看下面的 rename 用法範例吧!

cpp-rename.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// g++ cpp-rename.cpp -o a.out
#include <stdio.h>

int main() {
char oldname[] = "oldname.txt";
char newname[] = "newname.txt";

int result = rename(oldname, newname);
if (result == 0)
printf("File renamed successfully\n");
else
printf("Failed to rename file\n");
return 0;
}

rename() 成功重新命名的結果如下,

1
File renamed successfully

rename() 除了對檔案重新命名以外,如果要移動檔案的話,也可以用 rename() 來達成唷!如下列範例,

1
int result = rename("newdir/oldname.txt", "newdir/newname.txt");

以上就是 C/C++ rename 重新命名的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
rename - C++ Reference
https://www.cplusplus.com/reference/cstdio/rename/

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包

C/C++ malloc 用法與範例

本篇 ShengYu 介紹 C/C++ malloc 用法與範例,malloc 是用來配置一段記憶體區塊的函式,以下介紹如何使用 malloc 函式。

C/C++ 可以使用 malloc 來配置一段記憶體區塊,要使用 malloc 的話需要引入的標頭檔 <stdlib.h>,如果要使用 C++ 的標頭檔則是引入 <cstdlib>
malloc 函式原型為

1
void* malloc(size_t size);

malloc() 配置 size bytes 的記憶體區塊,會回傳一個指向該記憶體開頭的指標,這些記憶體的內容是尚未被初始化的,也就是說裡面目前存放的數值是未知的,如果配置失敗的話會回傳 null pointer (NULL),配置成功的話會回傳 void * 指標,void * 指標能被轉成任何一種類型的指標,來看看下面的 malloc 用法範例吧!

使用 malloc 配置 20 bytes 記憶體大小的區塊,回傳的 ptr 檢查一下是不是 NULL,之後使用 strcpy() 複製字串到 ptr 裡並印出來,使用完 ptr 後別忘記了要使用 free() 歸還記憶體區塊。

cpp-malloc.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// g++ cpp-malloc.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char * ptr;
ptr = (char *) malloc(sizeof(char) * 20);

if (ptr == NULL) {
printf("malloc failed\n");
exit(1);
}

strcpy(ptr, "Hello World");
printf("%s\n", ptr);
free(ptr);
return 0;
}

結果如下,

1
Hello World

malloc int 一維陣列

這邊示範動態記憶體配置一個 int 一維陣列的寫法,

1
2
3
int *p = (int *) malloc(sizeof(int) * 3);
...
free(p);

如果要分成兩行寫的話,

1
2
3
4
int *p;
p = (int *) malloc(sizeof(int) * 3);
...
free(p);

再來看看怎麼配置一維陣列後,再給初始值,

cpp-malloc2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// g++ cpp-malloc2.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>

int main() {
int *p = (int *) malloc(sizeof(int) * 3);
p[0] = 1;
p[1] = 2;
p[2] = 3;

printf("%d,%d,%d\n", p[0], p[1], p[2]);

free(p);
return 0;
}

輸出如下,

1
1,2,3

malloc int 二維陣列

動態配置二維陣列這個通常會在影像處理中使用到這個技巧,假設我們要配置 3 * 4 大小的 int 二維陣列,注意在使用完該變數後還是要將其變數 free 歸還記憶體,二維陣列怎麼 malloc 的,free 時就怎麼 free。

cpp-malloc3.cpp
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
// g++ cpp-malloc3.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>

int main() {
int **p = (int **) malloc(sizeof(int *) * 3);
for (int i = 0; i < 3; i++) {
p[i] = (int *) malloc(sizeof(int) * 4);
for (int j = 0; j < 4; j++) {
p[i][j] = 0;
}
}

p[0][1] = 1;
p[1][1] = 2;
p[2][1] = 3;

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}

for (int i = 0; i < 3; i++) {
free(p[i]);
}
free(p);
return 0;
}

二維陣列輸出結果如下,

1
2
3
0 1 0 0 
0 2 0 0
0 3 0 0

如果要在記憶體分配的同時初始化成 0 的話可以改用 calloc,就不用像上面用 malloc 完後一一去初始化,這也是 malloc 與 calloc 的差異,
malloc 分配記憶體時是不初始化的,calloc 分配記憶體的同時也初始化成 0,

cpp-malloc4.cpp
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
// g++ cpp-malloc4.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>

int main() {
int **p = (int **) malloc(sizeof(int *) * 3);
for (int i = 0; i < 3; i++) {
p[i] = (int *) calloc(4, sizeof(int));
}

p[0][1] = 1;
p[1][1] = 2;
p[2][1] = 3;

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}

for (int i = 0; i < 3; i++) {
free(p[i]);
}
free(p);
return 0;
}

以上就是 C/C++ malloc 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
malloc - C++ Reference
https://www.cplusplus.com/reference/cstdlib/malloc/

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ memset 用法與範例
C/C++ memcpy 用法與範例
C++ new 動態記憶體配置用法與範例
C++ malloc invalid conversion from void* to int* 無效的轉換