基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼
大家好,我是了不起!
在某些難以抉擇得時(shí)候,我們經(jīng)常要用外力來幫助我們做出選擇
比如,梁山出征方臘前沙場(chǎng)點(diǎn)兵,挑選先鋒的場(chǎng)景
這個(gè)時(shí)候,有一個(gè)隨機(jī)點(diǎn)名系統(tǒng)就非常好啦,畢竟我水泊梁山的名號(hào)~
效果展示
創(chuàng)建一個(gè)這樣的文件夾,然后把要隨機(jī)點(diǎn)名的名字寫在里面
導(dǎo)入后,這里就顯示你導(dǎo)入了多少人員信息
點(diǎn)擊開始點(diǎn)名后,會(huì)隨機(jī)從導(dǎo)入名字里挑選一位幸運(yùn)兒~
效果大概就是這樣,下面我們來看看代碼吧
代碼展示
導(dǎo)入模塊
里面有第三方模塊,需要大家自己安裝一下
from?PyQt5.QtWidgets?import?* from?PyQt5.QtGui?import?* from?PyQt5.QtCore?import?* from?qdarkstyle?import?load_stylesheet_pyqt5 import?os import?sys import?time import?random
class?WorkThread(QThread): ????trigger?=?pyqtSignal(str) ????finished?=?pyqtSignal(bool) ????def?__init__(self,?parent=None): ????????super(WorkThread,?self).__init__(parent) ????????self.parent?=?parent ????????self.working?=?True ????def?__del__(self): ????????self.working?=?False ????????self.wait() ????def?run(self): ????????data_list?=?self.parent.data_list ????????if?len(data_list)?>=?1: ????????????ran?=?random.randint(6,?10) ????????????print('遍歷次數(shù):',?ran) ????????????for?a?in?range(ran): ????????????????name?=?random.choice(data_list) ????????????????self.trigger.emit(name) ????????????????print(name) ????????????????time.sleep(0.6) ????????????self.finished.emit(True) ????????else: ????????????self.trigger.emit('無數(shù)據(jù)') class?ClassCollSystem(QWidget): ????def?__init__(self): ????????super(ClassCollSystem,?self).__init__() ????????self.data_list?=?[] ????????self.init_ui()
子線程調(diào)用
????def?init_ui(self): ????????self.thread_?=?WorkThread(self) ????????self.thread_.trigger.connect(self.set_name) ????????self.thread_.finished.connect(self.finished)
應(yīng)用初始化信息
????????self.setWindowTitle('課堂點(diǎn)名系統(tǒng)') ????????self.setWindowIcon(QIcon('課堂點(diǎn)名.ico')) ????????self.setFixedSize(500,?350)
姓名信息布局
????????vbox_name?=?QVBoxLayout() ????????self.current_name?=?QLabel() ????????self.current_name.setText('隨機(jī)點(diǎn)名啦') ????????self.current_name.setStyleSheet( ????????????'font-size:50px;text-align:center;font-weight:bold;font-family:"Microsoft?JhengHei";') ????????vbox_name.addWidget(self.current_name) ????????vbox_name.setAlignment(Qt.AlignCenter)
開始信息布局
????????vbox_start?=?QVBoxLayout() ????????self.start_btn?=?QPushButton() ????????self.start_btn.setText('開始點(diǎn)名') ????????self.start_btn.setFixedSize(160,?50) ????????self.start_btn.setStyleSheet( ????????????'font-size:30px;font-weight:bold;text-align:center;font-family:"Microsoft?JhengHei";') ????????self.start_btn.clicked.connect(self.start_btn_click) ????????vbox_start.addWidget(self.start_btn) ????????vbox_start.setAlignment(Qt.AlignCenter) ????????vbox_start.addSpacing(80)
數(shù)據(jù)信息布局
????????vbox_data?=?QHBoxLayout() ????????self.message?=?QLabel() ????????self.message.setText('信息提示') ????????self.message.setStyleSheet( ????????????'font-size:12px;') ????????self.import_btn?=?QPushButton() ????????self.import_btn.setText('導(dǎo)入數(shù)據(jù)') ????????self.import_btn.setFixedSize(90,?25) ????????self.import_btn.clicked.connect(self.import_btn_click) ????????vbox_data.addWidget(self.message) ????????vbox_data.addStretch(1) ????????vbox_data.addWidget(self.import_btn)
整體布局
????????vbox?=?QVBoxLayout() ????????vbox.addLayout(vbox_name) ????????vbox.addLayout(vbox_start) ????????vbox.addLayout(vbox_data) ????????self.setLayout(vbox) ????def?start_btn_click(self): ????????if?self.start_btn.text().strip()?==?'開始點(diǎn)名': ????????????self.thread_.start() ????????else: ????????????self.start_btn.setText('開始點(diǎn)名') ????def?set_name(self,?name): ????????self.current_name.setText(name) ????def?finished(self,?finished): ????????if?finished?is?True: ????????????self.start_btn.setText('就是你了') ????def?import_btn_click(self): ????????file?=?QFileDialog.getOpenFileName(self,?'選擇文件',?os.getcwd(),?'Text?File(*.txt)') ????????file_path?=?file[0] ????????print(file_path) ????????fl?=?open(str(file_path),?'r',?encoding='utf-8') ????????self.data_list?=?fl.read().strip().split('\n') ????????print(self.data_list) ????????self.message.setText('信息提示?|?成功導(dǎo)入['?+?str(len(self.data_list))?+?']條人員信息')
運(yùn)行
if?__name__?==?'__main__': ????app?=?QApplication(sys.argv) ????app.setStyleSheet(load_stylesheet_pyqt5()) ????main?=?ClassCollSystem() ????main.show() ????sys.exit(app.exec_())
到此這篇關(guān)于基于Python實(shí)現(xiàn)隨機(jī)點(diǎn)名系統(tǒng)的示例代碼的文章就介紹到這了,更多相關(guān)Python隨機(jī)點(diǎn)名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用folium實(shí)現(xiàn)地圖可視化
Folium是建立在Python生態(tài)系統(tǒng)的數(shù)據(jù)整理(Datawrangling)能力和Leaflet.js庫的映射能力之上的開源庫。這篇文章主要給大家介紹了關(guān)于如何Python利用folium實(shí)現(xiàn)地圖可視化的相關(guān)資料,需要的朋友可以參考下2021-05-05python中windows鏈接linux執(zhí)行命令并獲取執(zhí)行狀態(tài)的問題小結(jié)
這篇文章主要介紹了python中windows鏈接linux執(zhí)行命令并獲取執(zhí)行狀態(tài),由于工具是pyqt寫的所以牽扯到用python鏈接linux的問題,這里記錄一下一些碰到的問題,需要的朋友可以參考下2022-11-11