QGridLayout 是個widget 的排列工具, 他讓widget 可以像 excel 這樣樣的排成格子狀
雖然大多數的UI Layout 都可以使用之後會介紹的QT Designer 來製作, 但如果要再視窗加入很多按鈕, 或是要加入圖片或是之後會提到的 video streaming , QGridLayout 就是很重要的工具
要建立QGridLayout 物件很簡單
grid= GridLayout()
告訴 windows 使用 grid
win.setlayout(grid)
將 widget 加入 grid , 這裡的 widget 可以是 Qbutom 物件 或是 QLabel 等等
grid.addWidget(widget, col, row)
非常簡單吧
另外也會使用 for 迴圈建立 QPushButton, 這了一來方邊很多, 例如我們要建立 9x9 不需要
自己定義 81 的 button
#import 所需 package
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QGridLayout, QPushButton
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
def window():
app = QApplication(sys.argv)
win = QWidget()
grid = QGridLayout()
# 使用兩個 for 迴圈定義 button 物件並加入 grid
# button 內顯示的字串要加1 才會重一開始
for i in range(0,9):
for j in range(0,9):
grid.addWidget(QPushButton(str(i+1)+"*"+str(j+1)),i,j)
win.setLayout(grid) # 將 grid 加入 windows 物件
win.setWindowTitle("PyQt Grid Example")
win.setGeometry(50,50,200,200)
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
顯示結果如下
看到這解果可能有人會說 按鈕要如何運作?
難道Signal and Slot 要 一 個個 寫嗎?
還是依樣可以 用 for 來寫呢?
下一篇說分明
沒有留言:
張貼留言