You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Spyder_python/controller/UIController.py

177 lines
6.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from tkinter import ttk
import tkinter as tk
import controller.SpyderController as SC
from entity.BilibiliVideo import BilibiliVideo
from service.IFileService import IFileService
from service.CsvService import CsvService
from service.ExcelService import ExcelService
class UIController:
scRuslt_data=None
def main(self):
"""
UI的主进程启动UI界面并保持当return时表示UI界面已经被关闭。
:return: void
"""
print("zzr1")
#一些属性
##csv文件路径
csv_path="./csv_file"
##
excel_path="./excel_file"
# 创建主窗口
root = tk.Tk()
root.title("Python UI")
# 设置窗口的初始大小为800x600
root.geometry('800x400')
# 定义按钮点击事件处理函数
def on_start_button_click():
# 这里可以添加按钮点击事件的逻辑
print("start_Button clicked!")
videoCount=entry1.get()
threadCount = entry2.get()
waitTime = entry3.get()
if(videoCount==''):
videoCount=999
threadCount=10
waitTime=0.3
else:
if videoCount.isdigit():
videoCount=eval(videoCount)
else:
return print("video count is not digit")
if threadCount.isdigit():
threadCount=eval(threadCount)
else:
return print("thread count is not num ")
if waitTime.isdigit():
waitTime=eval(waitTime)
else:
return print("waitTime is not num")
#创建 SpyderController对象调用其函数
SpyderController=SC.SpyderController()
self.scRuslt_data=SpyderController.getBilibiliVideoList(videoCount,threadCount,waitTime)
print("爬取完成")
def on_stop_button_click():
# 这里可以添加按钮点击事件的逻辑
##测试数据
# data1 = BilibiliVideo(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
# data2 = BilibiliVideo(2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
# text_date = [data1, data2]
# self.scRuslt_data=text_date
if self.scRuslt_data is None:
return print("爬取数据实体类为空")
for data in self.scRuslt_data:
theList = []
theList.append(data.bvId)
theList.append(data.title)
theList.append(data.url)
theList.append(data.uploadTime)
theList.append(data.uploadTimeText)
theList.append(data.topNo)
theList.append(data.viewCount)
theList.append(data.likeCount)
theList.append(data.coinCount)
theList.append(data.favoriteCount)
theList.append(data.commentCount)
theList.append(data.bulletCount)
theList.append(data.creatorId)
theList.append(data.creatorName)
theList.append(data.creatorFanCount)
tree.insert("", "end", values=theList)
def button_save_to_exce_click():
# 这里可以添加按钮点击事件的逻辑
#print("Button clicked!")
EXL = ExcelService()
if (self.scRuslt_data != None):
EXL.save(excel_path,self.scRuslt_data)
else:
print("爬取数据实体类为空")
def button_save_to_csv_click():
# 这里可以添加按钮点击事件的逻辑
# print("Button clicked!")
CS=CsvService()
if(self.scRuslt_data!=None):
CS.save(csv_path,self.scRuslt_data)
else:
print("爬取数据实体类为空")
# 创建带有标签的输入框
# 创建带有标签的输入框
def add_labeled_entry(parent, label_text, row):
label = tk.Label(parent, text=label_text)
label.grid(row=row, column=0, sticky=tk.E) # 使用sticky参数使标签右对齐
entry = tk.Entry(parent)
entry.grid(row=row, column=1, sticky=tk.W) # 使用sticky参数使输入框左对齐
return entry
entry1 = add_labeled_entry(root, "爬取热门视频的总条目数:",0)
entry2 = add_labeled_entry(root, "线程数量:",1)
entry3 = add_labeled_entry(root, "每次待爬取时间:",2)
# 创建一个按钮,点击时调用上面定义的事件处理函数
button_start = tk.Button(root, text="Start", command=on_start_button_click)
button_start.grid(row=3, column=1, sticky=tk.W)
button_stop = tk.Button(root, text="Stop", command=on_stop_button_click)
button_stop.grid(row=4, column=1,sticky=tk.W)
button_save_to_excel = tk.Button(root, text="save to excel", command=button_save_to_exce_click)
button_save_to_excel.grid(row=5, column=1, sticky=tk.W)
button_save_to_csv = tk.Button(root, text="save to csv", command=button_save_to_csv_click)
button_save_to_csv.grid(row=6, column=1,sticky=tk.W)
# 创建一个带展示框
tree = ttk.Treeview(root, columns=("bvid", "title","url",'uploadTime',"uploadTimeText","topNo","viewCount","likeCount","coinCount","favorite","commentCount","bolletCount","creatorld","creatorName","createFanCount"))
tree.heading("#1", text="bvid")
tree.heading("#2", text="title")
tree.heading('#3', text="url")
tree.heading('#4', text="uploadtime")
tree.heading('#5', text="uploadtimeTexT")
tree.heading('#6', text="topNo")
tree.heading('#7', text="ViewCount")
tree.heading('#8', text="likeCount")
tree.heading('#9', text="coinCount")
tree.heading('#10', text="favorite")
tree.heading('#11', text="commentCount")
tree.heading('#12', text="bulletCount")
tree.heading('#13', text="creadtorId")
tree.heading('#14', text="creatorName")
tree.heading('#15', text="createFanCount")
# 向展示框添加数据
# 显示表格和滚动条
tree.grid(row=7, column=0,columnspan=10,rowspan=10)
# 创建一个水平滚动条
scrollbar_x = tk.Scrollbar(root, orient='horizontal', command=tree.xview)
scrollbar_x.grid(row=8, column=0, columnspan=2, sticky='ew')
tree.configure(xscrollcommand=scrollbar_x.set)
scrollbar_y = tk.Scrollbar(root, orient='vertical', command=tree.yview)
scrollbar_y.grid(row=7, column=11, sticky='ns')
tree.configure(yscrollcommand=scrollbar_y.set)
root.grid_rowconfigure(7, weight=1)
root.grid_columnconfigure(1, weight=1)
# 运行应用程序
root.mainloop()
if __name__ == '__main__':
UI = UIController()
UI.main()