網(wǎng)站制作策劃書最新域名8xgmvxyz
開始設(shè)計(jì)和組態(tài)畫面。
? ? ? ? ?? 關(guān)于背景和配色
????????在組態(tài)畫面之前,先要確定好畫面的風(fēng)格和色系。如果有前端經(jīng)驗(yàn)和美術(shù)功底,可以建立自己的配色體系。像我這種工科男,就只能從網(wǎng)絡(luò)上下載一些別人做好的優(yōu)秀界面,然后在photo shop中摳取色號作為界面的顏色庫。必須注意的一點(diǎn),做工程不是搞藝術(shù),千萬不要過多加入私人的和個(gè)性的元素,比如把圖標(biāo)和背景搞成自己喜歡的動漫人物之類的,因?yàn)檫@樣極大概率會引起客戶的反感,認(rèn)為作者輕視項(xiàng)目和審美自私,對客戶缺乏應(yīng)有的尊重。
? ? ? ? 配色的一些基礎(chǔ)知識文章推薦:UI設(shè)計(jì)界面配色指南,以及UI設(shè)計(jì)色彩應(yīng)用規(guī)范
?????????? 畫面組件的伸展特性??????
? ? ? ? 作為一個(gè)軟件界面,它的另一個(gè)必備特性是對顯示屏幕分辨率的自動適配能力,我們不太可能讓客戶只能使用與我們的編程電腦相同分辨率的顯示器。一般來講,界面軟件會對顯示屏幕有一個(gè)最低分辨率的要求,只要顯示屏幕高于最低分辨率都應(yīng)該能夠自動適配并正常顯示。這樣,界面上的有些區(qū)域就要具備自動縮放的屬性,比如圖片顯示區(qū)。另外一些區(qū)域,比如按鈕站,它的大小是固定的,不隨屏幕分辨率和界面尺寸變化而變化。
下面來完善一下項(xiàng)目的文件框架,并開始組態(tài)。
一、在designer中新建QWidget畫面,命名為form1.ui,保存在項(xiàng)目的/uis目錄下。在畫面上放置一個(gè)QLabel,一個(gè)QPuchButton,分別命名為label_1和btn_1。
二、使用pyuic工具將form1.ui文件轉(zhuǎn)為form1.py文件。并且新建了一些目錄和文件,當(dāng)前的目錄結(jié)構(gòu)如下:
functions目錄:存放功能函數(shù)
ui_project.py:項(xiàng)目級別的一個(gè)腳本,所有的對于ui項(xiàng)目而言的全局信號和變量都在這個(gè)腳本內(nèi)定義。
form1.ui:在designer中布局和設(shè)計(jì)的界面文件??梢岳斫鉃榻缑娴膱D形文件。
form1.py:由form1.ui經(jīng)uis工具轉(zhuǎn)換而來的py文件??梢岳斫鉃榻缑娴那岸宋募?/p>
form1_func.py:在form1.py基礎(chǔ)上增加了功能和信號的py文件。可以理解為界面的后端和功能文件。
main.py:主函數(shù)。
uis目錄下的__init__.py文件,這個(gè)文件的代碼如下:
__all__ = ["form1_func"] # 用于控制哪些模塊被導(dǎo)出
????????這行代碼控制了當(dāng)在別的地方使用“from uis import *”調(diào)用uis這個(gè)包時(shí),哪些模塊被導(dǎo)入,哪些模塊不被導(dǎo)入。
三、各個(gè)腳本的代碼:
? ? ? ? 1、form1_func.py:
from PySide6.QtCore import Slot
from PySide6.QtWidgets import QWidgetfrom . import form1 # 導(dǎo)入使用uis工具從form1.ui生成而來的form1.py文件
from functions.ui_project import uiproj # 導(dǎo)入全局的ui項(xiàng)目對象# 定義窗口類
class Form1(QWidget, form1.Ui_Form):def __init__(self):super().__init__()self.setupUi(self) # 加載窗口self.run() # 初始化運(yùn)行窗口def run(self): # 窗口的運(yùn)行函數(shù)self.show() # 顯示窗口@Slot()def date_show(t): # 顯示日期的槽函數(shù)self.label_1.setText(t) # 設(shè)置label_1的文本uiproj.date_signal.connect(date_show) # 連接日期信號@Slot()def on_btn_1_clicked(): # 按鈕1點(diǎn)擊事件連接的槽函數(shù)self.label_1.setText("local clicked") # 設(shè)置label_1的文本self.btn_1.clicked.connect(on_btn_1_clicked) # 按鈕1點(diǎn)擊事件連接槽函數(shù)
? ? ? ? 2、ui_project.py:
# 這里定義項(xiàng)目級別的信號和變量、參數(shù)等
import timefrom PySide6.QtCore import Signal, QObject, QTimer# 定義全局的ui項(xiàng)目類
class UiProj(QObject):# 定義全局信號date_signal = Signal(str) # 全局的日期信號def __init__(self):super(UiProj, self).__init__()self.time_str = "" # 全局的日期變量self.timer = QTimer() # 定義全局定時(shí)器 @Slot()# 刷新日期def refresh_time(self):self.time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 刷新日期變量self.date_signal.emit(self.time_str) # 發(fā)送信號uiproj = UiProj() # 生成全局的ui項(xiàng)目對象
? ? ? ? 3?、main.py:
import sysfrom PySide6.QtCore import Signal, QObject
from PySide6.QtWidgets import QApplication
from gui.uis import * # 導(dǎo)入所有窗口類from functions.ui_project import uiprojdef main():app = QApplication(sys.argv)form1 = form1_func.Form1() # 實(shí)例化窗口類uiproj.timer.start(1000) # 啟動全局定時(shí)器uiproj.timer.timeout.connect(uiproj.refresh_time) # 連接定時(shí)器的超時(shí)信號sys.exit(app.exec())if __name__ == "__main__":main()
????????以上代碼演示了如何使用一個(gè)全局的信號和變量來跨窗口操作部件,以及同窗口內(nèi)局部的信號和槽的連接。凡是用uiproj.開頭的信號和變量等,都是全局的。凡是self.開頭的都是局部的。
? ? ? ? 運(yùn)行截圖:
?