Python模拟数据生成器全代码

前言

  在我们项目开发过程中,可能需要大量的虚拟数据对某些功能进行测试,手动编辑这些拟真数据将会耗费大量时间,所以我想,能不能写个小脚本自动生成一些自己想要的虚拟数据,刚好Python提供了Faker这一强大的第三方库,可以生成数十种国家不同语种的模拟数据,说干就干,因为博主身在项目中,时间有限,断断续续利用几个中午午休时间,终于完成了一个雏形,接下来放图和代码。
  
  本文出现的所有Excel内的信息皆为程序生成的模拟数据,无任何泄露个人信息行为!!!
  

程序使用演示

打开后界面

  本来这里和下面的流程都有配图的,但不知为何,审核一直不通过,所以图片就干掉了,大家可以把代码先跑起来,有不懂的地方再来看使用流程。

勾选数据并设置生成数据的条数

  首先选择国家语种(这个会影响数据的语言和格式,程序默认选择中国大陆),这里我把能选的数据都勾选了,其中有一些数据无法勾选,是因为在测试过程中发现,他们生成的数据格式与Excel不兼容,会因为报错导致程序崩溃,暂时没有时间解决,所以先让其无法选中,等后期有时间会进行优化。
  Excel最大行数为1048576行,所以生成数据条数我将其限制为999999条。最好不要同时生成过多的行和列,除非你实在饿的不行,想用你的电脑煎鸡蛋。

点击开始生成按钮

  点击开始生成按钮,即可根据你的设置生成Excel文件,如果不填写数据条数,将会生成一个没有数据只有列名的空模板。
  
  暂时没有做自定义文件名的功能,生成的Excel使用的是我设置的默认名,所以这里必须有一个文件占用的检查,如果文件被占用将会进行提示,不会继续生成数据,否则必然会出现文件被占用的错误,导致程序崩溃。

生成数据成功

一键生成人物相关信息

  大多数场景需要的只会是一些关于人的数据,所以我做了一个一键生成的按钮,牺牲了一些自由度,但节省了大量寻找和勾选数据的时间。
  
  无需勾选任何数据,只需要选择国家语种和设置要生成的数据条数,然后点击一键生成按钮即可快速生成一个关于人物的Excel,且不会与其他元素产生冲突。

全部代码

  代码量比较大,考虑到萌新的感受,我尽量将每行代码写上了注释,希望所有人都能看的轻松一点,如果有哪里不懂的地方,可以评论区回复,或私聊,我会尽快回复。

import random
import sys
import win32filefrom PyQt5 import QtCore, QtWidgets
from PyQt5.QtGui import QIntValidator
from PyQt5.QtWidgets import QLabel, QCheckBox, QHBoxLayout, QFormLayout, QPushButton, QLineEdit, \QMessageBox, QRadioButton, QButtonGroup
from faker import Faker
from openpyxl import workbookclass Main(object):def setupUi(self, MainWindow):# --------------------------------------------------------------------------------创建主窗口,包括可拉伸区域和滚动区域# 设置主窗口大小MainWindow.resize(1780, 1000)# 设置主窗口标题MainWindow.setWindowTitle('模拟数据生成器')# 创建QWidget(用户界面基类)self.main_widget = QtWidgets.QWidget(MainWindow)# 创建QHBoxLayout(水平布局)self.main_layout = QtWidgets.QHBoxLayout(self.main_widget)# 创建可拉伸区域self.splitter = QtWidgets.QSplitter(self.main_widget)self.splitter.setOrientation(QtCore.Qt.Vertical)# 在可拉伸区域创建一个QWidgetself.widget_btn = QtWidgets.QWidget(self.splitter)# 创建QHBoxLayout(水平布局)self.surround_layout = QtWidgets.QHBoxLayout(self.widget_btn)# 布局边距设置,可通过改变该参数达到改变可拉伸区域大小的效果self.surround_layout.setContentsMargins(0, 0, 0, 0)# 在QWidget创建滚动区域self.scrollArea = QtWidgets.QScrollArea(self.widget_btn)# 设置滚动区域部件自动调整,以避免额外空间的浪费self.scrollArea.setWidgetResizable(True)# 在滚动区域创建QWidgetself.scrollAreaWidgetContents = QtWidgets.QWidget()# 在QWidget创建QFormLayout(表单布局)self.f_layout = QFormLayout(self.scrollAreaWidgetContents)# 设置垂直间距,增强观感self.f_layout.setVerticalSpacing(10)# 将上面创建的组件添加并显示self.scrollArea.setWidget(self.scrollAreaWidgetContents)self.surround_layout.addWidget(self.scrollArea)self.main_layout.addWidget(self.splitter)# 将main_widget显示到MainWindow上MainWindow.setCentralWidget(self.main_widget)# ---------------------------------------------------------------------创建主窗口中显示的组件,包括各种标题、复选框、按钮# 标题文本self.region = QLabel('地区&语种:')# 创建单选框self.China_Mainland = QRadioButton('中国(大陆)')self.China_Taiwan = QRadioButton('中国(台湾)')self.English_UnitedStates = QRadioButton('英语(美国)')self.English_GreatBritain = QRadioButton('英语(英国)')self.English_Australia = QRadioButton('英语(澳大利亚)')self.English_Canada = QRadioButton('英语(加拿大)')self.English_NewZealand = QRadioButton('英语(新西兰)')self.Japanese = QRadioButton('日语')self.Korean = QRadioButton('韩语')self.German = QRadioButton('德语')self.French = QRadioButton('法语')self.Arabic_Egypt = QRadioButton('阿拉伯语(埃及)')self.Arabic_Palestine = QRadioButton('阿拉伯语(巴勒斯坦)')self.Arabic_SaudiArabia = QRadioButton('阿拉伯语(沙特阿拉伯)')self.Bulgarian = QRadioButton('保加利亚语')self.Bosnian = QRadioButton('波斯尼亚语')self.Czech = QRadioButton('捷克语')self.Danish = QRadioButton('丹麦语')self.Greek = QRadioButton('希腊语')self.Spanish_Spain = QRadioButton('西班牙语(西班牙)')self.Spanish_Mexico = QRadioButton('西班牙语(墨西哥)')self.Estonian = QRadioButton('爱沙尼亚语')self.Persian_Iran = QRadioButton('波斯语(伊朗)')self.Finnish = QRadioButton('芬兰语')self.Hindi = QRadioButton('印地语')self.Croatian = QRadioButton('克罗地亚语')self.Hungarian = QRadioButton('匈牙利语')self.Armenian = QRadioButton('亚美尼亚语')self.Italian = QRadioButton('意大利语')self.Georgian_Georgia = QRadioButton('格鲁吉亚语(格鲁吉亚)')self.Lithuanian = QRadioButton('立陶宛语')self.Latvian = QRadioButton('拉脱维亚语')self.Nepali = QRadioButton('尼泊尔语')self.Dutch_Netherlands = QRadioButton('荷兰语(荷兰)')self.Norwegian = QRadioButton('挪威语')self.Polish = QRadioButton('波兰语')self.Portuguese_Brazil = QRadioButton('葡萄牙语(巴西)')self.Portuguese_Portugal = QRadioButton('葡萄牙语(葡萄牙)')self.Romanian = QRadioButton('罗马尼亚语')self.Russian = QRadioButton('俄语')self.Slovene = QRadioButton('斯洛文尼亚语')self.Swedish = QRadioButton('瑞典语')self.Turkish = QRadioButton('土耳其语')self.Ukrainian = QRadioButton('乌克兰语')# 创建单选框组self.region_group = QButtonGroup()# 将单选框加入单选框组self.region_group.addButton(self.China_Mainland)self.region_group.addButton(self.China_Taiwan)self.region_group.addButton(self.English_UnitedStates)self.region_group.addButton(self.English_GreatBritain)self.region_group.addButton(self.English_Australia)self.region_group.addButton(self.English_Canada)self.region_group.addButton(self.English_NewZealand)self.region_group.addButton(self.Japanese)self.region_group.addButton(self.Korean)self.region_group.addButton(self.German)self.region_group.addButton(self.French)self.region_group.addButton(self.Arabic_Egypt)self.region_group.addButton(self.Arabic_Palestine)self.region_group.addButton(self.Arabic_SaudiArabia)self.region_group.addButton(self.Bulgarian)self.region_group.addButton(self.Bosnian)self.region_group.addButton(self.Czech)self.region_group.addButton(self.Danish)self.region_group.addButton(self.Greek)self.region_group.addButton(self.Spanish_Spain)self.region_group.addButton(self.Spanish_Mexico)self.region_group.addButton(self.Estonian)self.region_group.addButton(self.Persian_Iran)self.region_group.addButton(self.Finnish)self.region_group.addButton(self.Hindi)self.region_group.addButton(self.Croatian)self.region_group.addButton(self.Hungarian)self.region_group.addButton(self.Armenian)self.region_group.addButton(self.Italian)self.region_group.addButton(self.Georgian_Georgia)self.region_group.addButton(self.Lithuanian)self.region_group.addButton(self.Latvian)self.region_group.addButton(self.Nepali)self.region_group.addButton(self.Dutch_Netherlands)self.region_group.addButton(self.Norwegian)self.region_group.addButton(self.Polish)self.region_group.addButton(self.Portuguese_Brazil)self.region_group.addButton(self.Portuguese_Portugal)self.region_group.addButton(self.Romanian)self.region_group.addButton(self.Russian)self.region_group.addButton(self.Slovene)self.region_group.addButton(self.Swedish)self.region_group.addButton(self.Turkish)self.region_group.addButton(self.Ukrainian)# 创建一个QHBoxLayout(水平布局)self.region_widget = QHBoxLayout()# 往QHBoxLayout里添加复选框组件self.region_widget.addWidget(self.China_Mainland)self.region_widget.addWidget(self.China_Taiwan)self.region_widget.addWidget(self.English_UnitedStates)self.region_widget.addWidget(self.English_GreatBritain)self.region_widget.addWidget(self.English_Australia)self.region_widget.addWidget(self.English_Canada)self.region_widget.addWidget(self.English_NewZealand)self.region_widget.addWidget(self.Japanese)self.region_widget.addWidget(self.Korean)self.region_widget.addWidget(self.German)self.region_widget.addWidget(self.French)self.region_widget.addWidget(self.Arabic_Egypt)self.region_widget.addWidget(self.Arabic_Palestine)self.region_widget.addWidget(self.Arabic_SaudiArabia)self.region_widget.addWidget(self.Bulgarian)self.region_widget.addWidget(self.Bosnian)self.region_widget.addWidget(self.Czech)self.region_widget.addWidget(self.Danish)self.region_widget.addWidget(self.Greek)self.region_widget.addWidget(self.Spanish_Spain)self.region_widget.addWidget(self.Spanish_Mexico)self.region_widget.addWidget(self.Estonian)self.region_widget.addWidget(self.Persian_Iran)self.region_widget.addWidget(self.Finnish)self.region_widget.addWidget(self.Hindi)self.region_widget.addWidget(self.Croatian)self.region_widget.addWidget(self.Hungarian)self.region_widget.addWidget(self.Armenian)self.region_widget.addWidget(self.Italian)self.region_widget.addWidget(self.Georgian_Georgia)self.region_widget.addWidget(self.Lithuanian)self.region_widget.addWidget(self.Latvian)self.region_widget.addWidget(self.Nepali)self.region_widget.addWidget(self.Dutch_Netherlands)self.region_widget.addWidget(self.Norwegian)self.region_widget.addWidget(self.Polish)self.region_widget.addWidget(self.Portuguese_Brazil)self.region_widget.addWidget(self.Portuguese_Portugal)self.region_widget.addWidget(self.Romanian)self.region_widget.addWidget(self.Russian)self.region_widget.addWidget(self.Slovene)self.region_widget.addWidget(self.Swedish)self.region_widget.addWidget(self.Turkish)self.region_widget.addWidget(self.Ukrainian)# 将region(标题文本)和QHBoxLayout(水平布局)添加进表单布局self.f_layout.addRow(self.region, self.region_widget)# 单选框选中、取消事件self.China_Mainland.toggled.connect(self.onChinaMainland)self.China_Taiwan.toggled.connect(self.onChinaTaiwan)self.English_UnitedStates.toggled.connect(self.onEnglishUnitedStates)self.English_GreatBritain.toggled.connect(self.onEnglishGreatBritain)self.English_Australia.toggled.connect(self.onEnglishAustralia)self.English_Canada.toggled.connect(self.onEnglishCanada)self.English_NewZealand.toggled.connect(self.onEnglishNewZealand)self.Japanese.toggled.connect(self.onJapanese)self.Korean.toggled.connect(self.onKorean)self.German.toggled.connect(self.onGerman)self.French.toggled.connect(self.onFrench)self.Arabic_Egypt.toggled.connect(self.onArabicEgypt)self.Arabic_Palestine.toggled.connect(self.onArabicPalestine)self.Arabic_SaudiArabia.toggled.connect(self.onArabicSaudiArabia)self.Bulgarian.toggled.connect(self.onBulgarian)self.Bosnian.toggled.connect(self.onBosnian)self.Czech.toggled.connect(self.onCzech)self.Danish.toggled.connect(self.onDanish)self.Greek.toggled.connect(self.onGreek)self.Spanish_Spain.toggled.connect(self.onSpanishSpain)self.Spanish_Mexico.toggled.connect(self.onSpanishMexico)self.Estonian.toggled.connect(self.onEstonian)self.Persian_Iran.toggled.connect(self.onPersianIran)self.Finnish.toggled.connect(self.onFinnish)self.Hindi.toggled.connect(self.onHindi)self.Croatian.toggled.connect(self.onCroatian)self.Hungarian.toggled.connect(self.onHungarian)self.Armenian.toggled.connect(self.onArmenian)self.Italian.toggled.connect(self.onItalian)self.Georgian_Georgia.toggled.connect(self.onGeorgianGeorgia)self.Lithuanian.toggled.connect(self.onLithuanian)self.Latvian.toggled.connect(self.onLatvian)self.Nepali.toggled.connect(self.onNepali)self.Dutch_Netherlands.toggled.connect(self.onDutchNetherlands)self.Norwegian.toggled.connect(self.onNorwegian)self.Polish.toggled.connect(self.onPolish)self.Portuguese_Brazil.toggled.connect(self.onPortugueseBrazil)self.Portuguese_Portugal.toggled.connect(self.onPortuguesePortugal)self.Romanian.toggled.connect(self.onRomanian)self.Russian.toggled.connect(self.onRussian)self.Slovene.toggled.connect(self.onSlovene)self.Swedish.toggled.connect(self.onSwedish)self.Turkish.toggled.connect(self.onTurkish)self.Ukrainian.toggled.connect(self.onUkrainian)# 设置为默认选中self.China_Mainland.setChecked(True)# 地址相关self.addressBe = QLabel('地址相关:')# 复选框self.address_all = QCheckBox('全选')self.address = QCheckBox('地址')self.building_number = QCheckBox('楼名')self.city = QCheckBox('完整城市名')self.city_name = QCheckBox('城市名(无市县)')self.city_suffix = QCheckBox('城市后缀名')self.country = QCheckBox('国家名称')self.country_code = QCheckBox('国家编号')self.district = QCheckBox('地区')self.postcode = QCheckBox('邮编')self.province = QCheckBox('省(中国)')self.street_address = QCheckBox('街道地址')self.street_name = QCheckBox('街道名称')self.street_suffix = QCheckBox('街道后缀名')# 创建一个QHBoxLayoutself.address_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.address_widget.setContentsMargins(0, 0, 3350, 0)# 往QHBoxLayout添加复选框组件self.address_widget.addWidget(self.address_all)self.address_widget.addWidget(self.address)self.address_widget.addWidget(self.building_number)self.address_widget.addWidget(self.city)self.address_widget.addWidget(self.city_name)self.address_widget.addWidget(self.city_suffix)self.address_widget.addWidget(self.country)self.address_widget.addWidget(self.country_code)self.address_widget.addWidget(self.district)self.address_widget.addWidget(self.postcode)self.address_widget.addWidget(self.province)self.address_widget.addWidget(self.street_address)self.address_widget.addWidget(self.street_name)self.address_widget.addWidget(self.street_suffix)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.addressBe, self.address_widget)# 复选框选中、取消事件self.address_all.stateChanged.connect(self.onAddressAll)self.address.stateChanged.connect(self.onAddress)self.building_number.stateChanged.connect(self.onBuildingNumber)self.city.stateChanged.connect(self.onCity)self.city_name.stateChanged.connect(self.onCityName)self.city_suffix.stateChanged.connect(self.onCitySuffix)self.country.stateChanged.connect(self.onCountry)self.country_code.stateChanged.connect(self.onCountryCode)self.district.stateChanged.connect(self.onDistrict)self.postcode.stateChanged.connect(self.onPostcode)self.province.stateChanged.connect(self.onProvince)self.street_address.stateChanged.connect(self.onStreetAddress)self.street_name.stateChanged.connect(self.onStreetName)self.street_suffix.stateChanged.connect(self.onStreetSuffix)# 汽车相关self.automobile = QLabel('汽车相关:')# 复选框self.automobile_all = QCheckBox('全选')self.license_plate = QCheckBox('牌照')# 创建一个QHBoxLayoutself.automobile_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.automobile_widget.setContentsMargins(0, 0, 4433, 0)# 往QHBoxLayout添加复选框组件self.automobile_widget.addWidget(self.automobile_all)self.automobile_widget.addWidget(self.license_plate)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.automobile, self.automobile_widget)# 复选框选中、取消事件self.automobile_all.stateChanged.connect(self.onAutomobileAll)self.license_plate.stateChanged.connect(self.onLicensePlate)# 银行相关self.bank = QLabel('银行相关:')# 复选框self.bank_all = QCheckBox('全选')self.bank_country = QCheckBox('银行所属国家')self.bban = QCheckBox('基本银行账号')self.iban = QCheckBox('国际银行代码')# 创建一个QHBoxLayoutself.bank_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.bank_widget.setContentsMargins(0, 0, 4139, 0)# 往QHBoxLayout添加复选框组件self.bank_widget.addWidget(self.bank_all)self.bank_widget.addWidget(self.bank_country)self.bank_widget.addWidget(self.bban)self.bank_widget.addWidget(self.iban)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.bank, self.bank_widget)# 复选框选中、取消事件self.bank_all.stateChanged.connect(self.onBankAll)self.bank_country.stateChanged.connect(self.onBankCountry)self.bban.stateChanged.connect(self.onBban)self.iban.stateChanged.connect(self.onIban)# 条形码相关self.bar_code = QLabel('条形码相关:')# 复选框self.bar_code_all = QCheckBox('全选')self.ean = QCheckBox('EAN条形码')self.ean13 = QCheckBox('EAN13条形码')self.ean8 = QCheckBox('EAN8条形码')# 创建一个QHBoxLayoutself.bar_code_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.bar_code_widget.setContentsMargins(0, 0, 4177, 0)# 往QHBoxLayout添加复选框组件self.bar_code_widget.addWidget(self.bar_code_all)self.bar_code_widget.addWidget(self.ean)self.bar_code_widget.addWidget(self.ean13)self.bar_code_widget.addWidget(self.ean8)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.bar_code, self.bar_code_widget)# 复选框选中、取消事件self.bar_code_all.stateChanged.connect(self.onBarCodeAll)self.ean.stateChanged.connect(self.onEan)self.ean13.stateChanged.connect(self.onEan13)self.ean8.stateChanged.connect(self.onEan8)# 颜色相关self.color = QLabel('颜色相关:')# 复选框self.color_all = QCheckBox('全选')self.color_name = QCheckBox('颜色名称')self.hex_color = QCheckBox('颜色十六进制值')self.rgb_color = QCheckBox('颜色RGB值')self.rgb_css_color = QCheckBox('CSS颜色值')self.safe_color_name = QCheckBox('安全色')self.safe_hex_color = QCheckBox('安全色十六进制值')# 创建一个QHBoxLayoutself.color_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.color_widget.setContentsMargins(0, 0, 3860, 0)# 往QHBoxLayout添加复选框组件self.color_widget.addWidget(self.color_all)self.color_widget.addWidget(self.color_name)self.color_widget.addWidget(self.hex_color)self.color_widget.addWidget(self.rgb_color)self.color_widget.addWidget(self.rgb_css_color)self.color_widget.addWidget(self.safe_color_name)self.color_widget.addWidget(self.safe_hex_color)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.color, self.color_widget)# 复选框选中、取消事件self.color_all.stateChanged.connect(self.onColorAll)self.color_name.stateChanged.connect(self.onColorName)self.hex_color.stateChanged.connect(self.onHexColor)self.rgb_color.stateChanged.connect(self.onRgbColor)self.rgb_css_color.stateChanged.connect(self.onRgbCssColor)self.safe_color_name.stateChanged.connect(self.onSafeColorName)self.safe_hex_color.stateChanged.connect(self.onSafeHexColor)# 公司相关self.company = QLabel('公司相关:')# 复选框self.company_all = QCheckBox('全选')self.bs = QCheckBox('商业用词')self.catch_phrase = QCheckBox('妙句(口号)')self.company_name = QCheckBox('公司名称')self.company_prefix = QCheckBox('公司名称前缀')self.company_suffix = QCheckBox('公司名称后缀')# 创建一个QHBoxLayoutself.company_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.company_widget.setContentsMargins(0, 0, 3978, 0)# 往QHBoxLayout添加复选框组件self.company_widget.addWidget(self.company_all)self.company_widget.addWidget(self.bs)self.company_widget.addWidget(self.catch_phrase)self.company_widget.addWidget(self.company_name)self.company_widget.addWidget(self.company_prefix)self.company_widget.addWidget(self.company_suffix)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.company, self.company_widget)# 复选框选中、取消事件self.company_all.stateChanged.connect(self.onCompanyAll)self.bs.stateChanged.connect(self.onBs)self.catch_phrase.stateChanged.connect(self.onCatchPhrase)self.company_name.stateChanged.connect(self.onCompanyName)self.company_prefix.stateChanged.connect(self.onCompanyPrefix)self.company_suffix.stateChanged.connect(self.onCompanySuffix)# 信用卡相关self.credit_cards = QLabel('信用卡相关:')# 复选框self.credit_cards_all = QCheckBox('全选')self.credit_card_expire = QCheckBox('过期年月')self.credit_card_full = QCheckBox('完整信用卡信息')self.credit_card_number = QCheckBox('信用卡卡号')self.credit_card_provider = QCheckBox('信用卡提供商')self.credit_card_security_code = QCheckBox('信用卡安全码')# 创建一个QHBoxLayoutself.credit_cards_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.credit_cards_widget.setContentsMargins(0, 0, 3935, 0)# 往QHBoxLayout添加复选框组件self.credit_cards_widget.addWidget(self.credit_cards_all)self.credit_cards_widget.addWidget(self.credit_card_expire)self.credit_cards_widget.addWidget(self.credit_card_full)self.credit_cards_widget.addWidget(self.credit_card_number)self.credit_cards_widget.addWidget(self.credit_card_provider)self.credit_cards_widget.addWidget(self.credit_card_security_code)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.credit_cards, self.credit_cards_widget)# 复选框选中、取消事件self.credit_cards_all.stateChanged.connect(self.onCreditCardsAll)self.credit_card_expire.stateChanged.connect(self.onCreditCardExpire)self.credit_card_full.stateChanged.connect(self.onCreditCardFull)self.credit_card_number.stateChanged.connect(self.onCreditCardNumber)self.credit_card_provider.stateChanged.connect(self.onCreditCardProvider)self.credit_card_security_code.stateChanged.connect(self.onCreditCardSecurityCode)# 货币相关self.money = QLabel('货币相关:')# 复选框self.money_all = QCheckBox('全选')self.cryptocurrency = QCheckBox('加密货币代码+名称')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.cryptocurrency.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.cryptocurrency.setFocusPolicy(QtCore.Qt.NoFocus)self.cryptocurrency_code = QCheckBox('加密货币代码')self.cryptocurrency_name = QCheckBox('加密货币名称')self.currency = QCheckBox('货币代码+名称')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.currency.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.currency.setFocusPolicy(QtCore.Qt.NoFocus)self.currency_code = QCheckBox('货币代码')self.currency_name = QCheckBox('货币名称')# 创建一个QHBoxLayoutself.money_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.money_widget.setContentsMargins(0, 0, 3800, 0)# 往QHBoxLayout添加复选框组件self.money_widget.addWidget(self.money_all)self.money_widget.addWidget(self.cryptocurrency)self.money_widget.addWidget(self.cryptocurrency_code)self.money_widget.addWidget(self.cryptocurrency_name)self.money_widget.addWidget(self.currency)self.money_widget.addWidget(self.currency_code)self.money_widget.addWidget(self.currency_name)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.money, self.money_widget)# 复选框选中、取消事件self.money_all.stateChanged.connect(self.onMoneyAll)self.cryptocurrency.stateChanged.connect(self.onCryptocurrency)self.cryptocurrency_code.stateChanged.connect(self.onCryptocurrencyCode)self.cryptocurrency_name.stateChanged.connect(self.onCryptocurrencyName)self.currency.stateChanged.connect(self.onCurrency)self.currency_code.stateChanged.connect(self.onCurrencyCode)self.currency_name.stateChanged.connect(self.onCurrencyName)# 时间相关self.times = QLabel('时间相关:')# 复选框self.time_all = QCheckBox('全选')self.am_pm = QCheckBox('AM或PM')self.century = QCheckBox('世纪')self.date = QCheckBox('日期字符串')self.date_between = QCheckBox('日期(限定范围)')self.date_between_dates = QCheckBox('日期(同左)')self.date_object = QCheckBox('日期(最大限制)')self.date_of_birth = QCheckBox('出生日期')self.date_this_century = QCheckBox('本世纪日期')self.date_this_decade = QCheckBox('本年代日期')self.date_this_month = QCheckBox('本月日期')self.date_this_year = QCheckBox('本年日期')self.date_time = QCheckBox('日期时间')self.date_time_ad = QCheckBox('日期时间(从001年1月1日到现在)')self.date_time_between = QCheckBox('日期时间(限定范围)')self.date_time_between_dates = QCheckBox('日期时间(同左)')self.date_time_this_century = QCheckBox('本世纪中的日期和时间')self.date_time_this_decade = QCheckBox('本年代中的日期和时间')self.date_time_this_month = QCheckBox('本月中的日期和时间')self.date_time_this_year = QCheckBox('本年中的日期和时间')self.day_of_month = QCheckBox('几号')self.day_of_week = QCheckBox('星期几')self.future_date = QCheckBox('未来日期')self.future_datetime = QCheckBox('未来日期和时间')self.iso8601 = QCheckBox('iso8601格式日期和时间')self.month = QCheckBox('月份')self.month_name = QCheckBox('月份名称')self.past_date = QCheckBox('过去日期')self.past_datetime = QCheckBox('过去日期和时间')self.time = QCheckBox('时间')self.time_delta = QCheckBox('时间间隔')self.time_object = QCheckBox('时间(最大限制)')self.timezone = QCheckBox('时区')self.unix_time = QCheckBox('UNIX时间戳')self.year = QCheckBox('某年')# 创建一个QHBoxLayoutself.time_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.time_widget.setContentsMargins(0, 0, 650, 0)# 往QHBoxLayout添加复选框组件self.time_widget.addWidget(self.time_all)self.time_widget.addWidget(self.am_pm)self.time_widget.addWidget(self.century)self.time_widget.addWidget(self.date)self.time_widget.addWidget(self.date_between)self.time_widget.addWidget(self.date_between_dates)self.time_widget.addWidget(self.date_object)self.time_widget.addWidget(self.date_of_birth)self.time_widget.addWidget(self.date_this_century)self.time_widget.addWidget(self.date_this_decade)self.time_widget.addWidget(self.date_this_month)self.time_widget.addWidget(self.date_this_year)self.time_widget.addWidget(self.date_time)self.time_widget.addWidget(self.date_time_ad)self.time_widget.addWidget(self.date_time_between)self.time_widget.addWidget(self.date_time_between_dates)self.time_widget.addWidget(self.date_time_this_century)self.time_widget.addWidget(self.date_time_this_decade)self.time_widget.addWidget(self.date_time_this_month)self.time_widget.addWidget(self.date_time_this_year)self.time_widget.addWidget(self.day_of_month)self.time_widget.addWidget(self.day_of_week)self.time_widget.addWidget(self.future_date)self.time_widget.addWidget(self.future_datetime)self.time_widget.addWidget(self.iso8601)self.time_widget.addWidget(self.month)self.time_widget.addWidget(self.month_name)self.time_widget.addWidget(self.past_date)self.time_widget.addWidget(self.past_datetime)self.time_widget.addWidget(self.time)self.time_widget.addWidget(self.time_delta)self.time_widget.addWidget(self.time_object)self.time_widget.addWidget(self.timezone)self.time_widget.addWidget(self.unix_time)self.time_widget.addWidget(self.year)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.times, self.time_widget)# 复选框选中、取消事件self.time_all.stateChanged.connect(self.onTimeAll)self.am_pm.stateChanged.connect(self.onAmPm)self.century.stateChanged.connect(self.onCentury)self.date.stateChanged.connect(self.onDate)self.date_between.stateChanged.connect(self.onDateBetween)self.date_between_dates.stateChanged.connect(self.onDateBetweenDates)self.date_object.stateChanged.connect(self.onDateObject)self.date_of_birth.stateChanged.connect(self.onDateOfBirth)self.date_this_century.stateChanged.connect(self.onDateThisCentury)self.date_this_decade.stateChanged.connect(self.onDateThisDecade)self.date_this_month.stateChanged.connect(self.onDateThisMonth)self.date_this_year.stateChanged.connect(self.onDateThisYear)self.date_time.stateChanged.connect(self.onDateTime)self.date_time_ad.stateChanged.connect(self.onDateTimeAd)self.date_time_between.stateChanged.connect(self.onDateTimeBetween)self.date_time_between_dates.stateChanged.connect(self.onDateTimeBetweenDates)self.date_time_this_century.stateChanged.connect(self.onDateTimeThisCentury)self.date_time_this_decade.stateChanged.connect(self.onDateTimeThisDecade)self.date_time_this_month.stateChanged.connect(self.onDateTimeThisMonth)self.date_time_this_year.stateChanged.connect(self.onDateTimeThisYear)self.day_of_month.stateChanged.connect(self.onDayOfMonth)self.day_of_week.stateChanged.connect(self.onDayOfWeek)self.future_date.stateChanged.connect(self.onFutureDate)self.future_datetime.stateChanged.connect(self.onFutureDatetime)self.iso8601.stateChanged.connect(self.onIso8601)self.month.stateChanged.connect(self.onMonth)self.month_name.stateChanged.connect(self.onMonthName)self.past_date.stateChanged.connect(self.onPastDate)self.past_datetime.stateChanged.connect(self.onPastDatetime)self.time.stateChanged.connect(self.onTime)self.time_delta.stateChanged.connect(self.onTimeDelta)self.time_object.stateChanged.connect(self.onTimeObject)self.timezone.stateChanged.connect(self.onTimezone)self.unix_time.stateChanged.connect(self.onUnixTime)self.year.stateChanged.connect(self.onYear)# 文件相关self.files = QLabel('文件相关:')# 复选框self.files_all = QCheckBox('全选')self.file_extension = QCheckBox('文件扩展名')self.file_name = QCheckBox('文件名')self.file_path = QCheckBox('文件路径')self.mime_type = QCheckBox('MIME类型')self.unix_device = QCheckBox('UNIX设备')self.unix_partition = QCheckBox('UNIX分区')# 创建一个QHBoxLayoutself.files_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.files_widget.setContentsMargins(0, 0, 3960, 0)# 往QHBoxLayout添加复选框组件self.files_widget.addWidget(self.files_all)self.files_widget.addWidget(self.file_extension)self.files_widget.addWidget(self.file_name)self.files_widget.addWidget(self.file_path)self.files_widget.addWidget(self.mime_type)self.files_widget.addWidget(self.unix_device)self.files_widget.addWidget(self.unix_partition)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.files, self.files_widget)# 复选框选中、取消事件self.files_all.stateChanged.connect(self.onFilesAll)self.file_extension.stateChanged.connect(self.onFileExtension)self.file_name.stateChanged.connect(self.onFileName)self.file_path.stateChanged.connect(self.onFilePath)self.mime_type.stateChanged.connect(self.onMimeType)self.unix_device.stateChanged.connect(self.onUnixDevice)self.unix_partition.stateChanged.connect(self.onUnixPartition)# 坐标相关self.co_ordinate = QLabel('坐标相关:')# 复选框self.co_ordinate_all = QCheckBox('全选')self.coordinate = QCheckBox('坐标')self.latitude = QCheckBox('纬度')self.latlng = QCheckBox('经纬度')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.latlng.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.latlng.setFocusPolicy(QtCore.Qt.NoFocus)self.local_latlng = QCheckBox('某个国家某地的经纬度')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.local_latlng.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.local_latlng.setFocusPolicy(QtCore.Qt.NoFocus)self.location_on_land = QCheckBox('地球上某个位置的经纬度')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.location_on_land.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.location_on_land.setFocusPolicy(QtCore.Qt.NoFocus)self.longitude = QCheckBox('经度')# 创建一个QHBoxLayoutself.co_ordinate_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.co_ordinate_widget.setContentsMargins(0, 0, 3865, 0)# 往QHBoxLayout添加复选框组件self.co_ordinate_widget.addWidget(self.co_ordinate_all)self.co_ordinate_widget.addWidget(self.coordinate)self.co_ordinate_widget.addWidget(self.latitude)self.co_ordinate_widget.addWidget(self.latlng)self.co_ordinate_widget.addWidget(self.local_latlng)self.co_ordinate_widget.addWidget(self.location_on_land)self.co_ordinate_widget.addWidget(self.longitude)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.co_ordinate, self.co_ordinate_widget)# 复选框选中、取消事件self.co_ordinate_all.stateChanged.connect(self.onCoOrdinateAll)self.coordinate.stateChanged.connect(self.onCoordinate)self.latitude.stateChanged.connect(self.onLatitude)self.latlng.stateChanged.connect(self.onLatlng)self.local_latlng.stateChanged.connect(self.onLocalLatlng)self.location_on_land.stateChanged.connect(self.onLocationOnLand)self.longitude.stateChanged.connect(self.onLongitude)# 网络相关self.network = QLabel('网络相关:')# 复选框self.network_all = QCheckBox('全选')self.ascii_company_email = QCheckBox('企业邮箱(ascii编码)')self.ascii_email = QCheckBox('企业邮箱+免费邮箱(ascii编码)')self.ascii_free_email = QCheckBox('免费邮箱(ascii编码)')self.ascii_safe_email = QCheckBox('安全邮箱(ascii编码)')self.company_email = QCheckBox('企业邮箱')self.domain_name = QCheckBox('域名')self.domain_word = QCheckBox('二级域名')self.email = QCheckBox('企业邮箱+免费邮箱')self.free_email = QCheckBox('免费邮箱')self.free_email_domain = QCheckBox('免费邮箱域名')self.hostname = QCheckBox('主机名')self.image_url = QCheckBox('图片URL')self.ipv4 = QCheckBox('ipv4')self.ipv4_network_class = QCheckBox('ipv4网络等级')self.ipv4_private = QCheckBox('私有ipv4')self.ipv4_public = QCheckBox('公共ipv4')self.ipv6 = QCheckBox('ipv6')self.mac_address = QCheckBox('MAC地址')self.safe_email = QCheckBox('安全邮箱')self.slug = QCheckBox('URL中的slug')self.tld = QCheckBox('顶级域名')self.uri = QCheckBox('URI(精确到文件)')self.uri_extension = QCheckBox('URI扩展')self.uri_page = QCheckBox('URI页')self.uri_path = QCheckBox('URI路径')self.url_schemes = QCheckBox('URL(精确到路径)')self.user_name = QCheckBox('用户名')# 创建一个QHBoxLayoutself.network_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.network_widget.setContentsMargins(0, 0, 1730, 0)# 往QHBoxLayout添加复选框组件self.network_widget.addWidget(self.network_all)self.network_widget.addWidget(self.ascii_company_email)self.network_widget.addWidget(self.ascii_email)self.network_widget.addWidget(self.ascii_free_email)self.network_widget.addWidget(self.ascii_safe_email)self.network_widget.addWidget(self.company_email)self.network_widget.addWidget(self.domain_name)self.network_widget.addWidget(self.domain_word)self.network_widget.addWidget(self.email)self.network_widget.addWidget(self.free_email)self.network_widget.addWidget(self.free_email_domain)self.network_widget.addWidget(self.hostname)self.network_widget.addWidget(self.ipv4_network_class)self.network_widget.addWidget(self.ipv4_private)self.network_widget.addWidget(self.ipv4_public)self.network_widget.addWidget(self.ipv6)self.network_widget.addWidget(self.mac_address)self.network_widget.addWidget(self.safe_email)self.network_widget.addWidget(self.slug)self.network_widget.addWidget(self.tld)self.network_widget.addWidget(self.uri)self.network_widget.addWidget(self.uri_extension)self.network_widget.addWidget(self.uri_page)self.network_widget.addWidget(self.uri_path)self.network_widget.addWidget(self.url_schemes)self.network_widget.addWidget(self.user_name)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.network, self.network_widget)# 复选框选中、取消事件self.network_all.stateChanged.connect(self.onNetworkAll)self.ascii_company_email.stateChanged.connect(self.onAsciiCompanyEmail)self.ascii_email.stateChanged.connect(self.onAsciiEmail)self.ascii_free_email.stateChanged.connect(self.onAsciiFreeEmail)self.ascii_safe_email.stateChanged.connect(self.onAsciiSafeEmail)self.company_email.stateChanged.connect(self.onCompanyEmail)self.domain_name.stateChanged.connect(self.onDomainName)self.domain_word.stateChanged.connect(self.onDomainWord)self.email.stateChanged.connect(self.onEmail)self.free_email.stateChanged.connect(self.onFreeEmail)self.free_email_domain.stateChanged.connect(self.onFreeEmailDomain)self.hostname.stateChanged.connect(self.onHostname)self.ipv4_network_class.stateChanged.connect(self.onIpv4NetworkClass)self.ipv4_private.stateChanged.connect(self.onIpv4Private)self.ipv4_public.stateChanged.connect(self.onIpv4Public)self.ipv6.stateChanged.connect(self.onIpv6)self.mac_address.stateChanged.connect(self.onMacAddress)self.safe_email.stateChanged.connect(self.onSafeEmail)self.slug.stateChanged.connect(self.onSlug)self.tld.stateChanged.connect(self.onTld)self.uri.stateChanged.connect(self.onUri)self.uri_extension.stateChanged.connect(self.onUriExtension)self.uri_page.stateChanged.connect(self.onUriPage)self.uri_path.stateChanged.connect(self.onUriPath)self.url_schemes.stateChanged.connect(self.onUrlSchemes)self.user_name.stateChanged.connect(self.onUserName)# 图书相关self.books = QLabel('图书相关:')# 复选框self.books_all = QCheckBox('全选')self.isbn10 = QCheckBox('ISBN-10图书编号')self.isbn13 = QCheckBox('ISBN-13图书编号')# 创建一个QHBoxLayoutself.books_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.books_widget.setContentsMargins(0, 0, 4200, 0)# 往QHBoxLayout添加复选框组件self.books_widget.addWidget(self.books_all)self.books_widget.addWidget(self.isbn10)self.books_widget.addWidget(self.isbn13)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.books, self.books_widget)# 复选框选中、取消事件self.books_all.stateChanged.connect(self.onBooksAll)self.isbn10.stateChanged.connect(self.onIsbn10)self.isbn13.stateChanged.connect(self.onIsbn13)# 职位相关self.position = QLabel('职位相关:')# 复选框self.position_all = QCheckBox('全选')self.job = QCheckBox('职位')# 创建一个QHBoxLayoutself.position_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.position_widget.setContentsMargins(0, 0, 4430, 0)# 往QHBoxLayout添加复选框组件self.position_widget.addWidget(self.position_all)self.position_widget.addWidget(self.job)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.position, self.position_widget)# 复选框选中、取消事件self.position_all.stateChanged.connect(self.onPositionAll)self.job.stateChanged.connect(self.onJob)# 文本相关self.textBe = QLabel('文本相关:')# 复选框self.text_all = QCheckBox('全选')self.paragraph = QCheckBox('单个段落')self.paragraphs = QCheckBox('多个段落')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.paragraphs.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.paragraphs.setFocusPolicy(QtCore.Qt.NoFocus)self.sentence = QCheckBox('单个句子')self.sentences = QCheckBox('多个句子')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.sentences.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.sentences.setFocusPolicy(QtCore.Qt.NoFocus)self.text = QCheckBox('单个文本')self.texts = QCheckBox('多个文本')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.texts.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.texts.setFocusPolicy(QtCore.Qt.NoFocus)self.word = QCheckBox('单个词语')self.words = QCheckBox('多个词语')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.words.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.words.setFocusPolicy(QtCore.Qt.NoFocus)# 创建一个QHBoxLayoutself.text_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.text_widget.setContentsMargins(0, 0, 3790, 0)# 往QHBoxLayout添加复选框组件self.text_widget.addWidget(self.text_all)self.text_widget.addWidget(self.paragraph)self.text_widget.addWidget(self.paragraphs)self.text_widget.addWidget(self.sentence)self.text_widget.addWidget(self.sentences)self.text_widget.addWidget(self.text)self.text_widget.addWidget(self.texts)self.text_widget.addWidget(self.word)self.text_widget.addWidget(self.words)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.textBe, self.text_widget)# 复选框选中、取消事件self.text_all.stateChanged.connect(self.onTextAll)self.paragraph.stateChanged.connect(self.onParagraph)self.paragraphs.stateChanged.connect(self.onParagraphs)self.sentence.stateChanged.connect(self.onSentence)self.sentences.stateChanged.connect(self.onSentences)self.text.stateChanged.connect(self.onText)self.texts.stateChanged.connect(self.onTexts)self.word.stateChanged.connect(self.onWord)self.words.stateChanged.connect(self.onWords)# 编码相关self.code = QLabel('编码相关:')# 复选框self.code_all = QCheckBox('全选')self.binary = QCheckBox('二进制')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.binary.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.binary.setFocusPolicy(QtCore.Qt.NoFocus)self.boolean = QCheckBox('布尔值')self.md5 = QCheckBox('Md5')self.null_boolean = QCheckBox('NULL+布尔值')self.password = QCheckBox('密码')self.sha1 = QCheckBox('SHA1')self.sha256 = QCheckBox('SHA256')self.uuid4 = QCheckBox('UUID4')# 创建一个QHBoxLayoutself.code_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.code_widget.setContentsMargins(0, 0, 3900, 0)# 往QHBoxLayout添加复选框组件self.code_widget.addWidget(self.code_all)self.code_widget.addWidget(self.binary)self.code_widget.addWidget(self.boolean)self.code_widget.addWidget(self.md5)self.code_widget.addWidget(self.null_boolean)self.code_widget.addWidget(self.password)self.code_widget.addWidget(self.sha1)self.code_widget.addWidget(self.sha256)self.code_widget.addWidget(self.uuid4)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.code, self.code_widget)# 复选框选中、取消事件self.code_all.stateChanged.connect(self.onCodeAll)self.binary.stateChanged.connect(self.onBinary)self.boolean.stateChanged.connect(self.onBoolean)self.md5.stateChanged.connect(self.onMd5)self.null_boolean.stateChanged.connect(self.onNullBoolean)self.password.stateChanged.connect(self.onPassword)self.sha1.stateChanged.connect(self.onSha1)self.sha256.stateChanged.connect(self.onSha256)self.uuid4.stateChanged.connect(self.onUuid4)# 人物相关self.peoples = QLabel('人物相关:')# 复选框self.peoples_all = QCheckBox('全选')self.first_name = QCheckBox('名')self.first_name_female = QCheckBox('名(女)')self.first_name_male = QCheckBox('名(男)')self.first_romanized_name = QCheckBox('名(罗马文)')self.last_name = QCheckBox('姓')self.last_name_female = QCheckBox('姓(女)')self.last_name_male = QCheckBox('姓(男)')self.last_romanized_name = QCheckBox('姓(罗马文)')self.name = QCheckBox('姓名')self.name_female = QCheckBox('姓名(女)')self.name_male = QCheckBox('姓名(男)')self.prefix = QCheckBox('称谓')self.prefix_female = QCheckBox('称谓(女)')self.prefix_male = QCheckBox('称谓(男)')self.romanized_name = QCheckBox('称谓(罗马文)')self.suffix = QCheckBox('姓名后缀(中文不适用)')# 创建一个QHBoxLayoutself.peoples_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.peoples_widget.setContentsMargins(0, 0, 3080, 0)# 往QHBoxLayout添加复选框组件self.peoples_widget.addWidget(self.peoples_all)self.peoples_widget.addWidget(self.first_name)self.peoples_widget.addWidget(self.first_name_female)self.peoples_widget.addWidget(self.first_name_male)self.peoples_widget.addWidget(self.first_romanized_name)self.peoples_widget.addWidget(self.last_name)self.peoples_widget.addWidget(self.last_name_female)self.peoples_widget.addWidget(self.last_name_male)self.peoples_widget.addWidget(self.last_romanized_name)self.peoples_widget.addWidget(self.name)self.peoples_widget.addWidget(self.name_female)self.peoples_widget.addWidget(self.name_male)self.peoples_widget.addWidget(self.prefix)self.peoples_widget.addWidget(self.prefix_female)self.peoples_widget.addWidget(self.prefix_male)self.peoples_widget.addWidget(self.romanized_name)self.peoples_widget.addWidget(self.suffix)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.peoples, self.peoples_widget)# 复选框选中、取消事件self.peoples_all.stateChanged.connect(self.onPeoplesAll)self.first_name.stateChanged.connect(self.onFirstName)self.first_name_female.stateChanged.connect(self.onFirstNameFemale)self.first_name_male.stateChanged.connect(self.onFirstNameMale)self.first_romanized_name.stateChanged.connect(self.onFirstRomanizedName)self.last_name.stateChanged.connect(self.onLastName)self.last_name_female.stateChanged.connect(self.onLastNameFemale)self.last_name_male.stateChanged.connect(self.onLastNameMale)self.last_romanized_name.stateChanged.connect(self.onLastRomanizedName)self.name.stateChanged.connect(self.onName)self.name_female.stateChanged.connect(self.onNameFemale)self.name_male.stateChanged.connect(self.onNameMale)self.prefix.stateChanged.connect(self.onPrefix)self.prefix_female.stateChanged.connect(self.onPrefixFemale)self.prefix_male.stateChanged.connect(self.onPrefixMale)self.romanized_name.stateChanged.connect(self.onRomanizedName)self.suffix.stateChanged.connect(self.onSuffix)# 电话相关self.phone = QLabel('电话相关:')# 复选框self.phone_all = QCheckBox('全选')self.msisdn = QCheckBox('完整手机号码(包含国家和国内区号)')self.phone_number = QCheckBox('手机号')self.phonenumber_prefix = QCheckBox('区号')# 创建一个QHBoxLayoutself.phone_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.phone_widget.setContentsMargins(0, 0, 4085, 0)# 往QHBoxLayout添加复选框组件self.phone_widget.addWidget(self.phone_all)self.phone_widget.addWidget(self.msisdn)self.phone_widget.addWidget(self.phone_number)self.phone_widget.addWidget(self.phonenumber_prefix)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.phone, self.phone_widget)# 复选框选中、取消事件self.phone_all.stateChanged.connect(self.onPhoneAll)self.msisdn.stateChanged.connect(self.onMsisdn)self.phone_number.stateChanged.connect(self.onPhoneNumber)self.phonenumber_prefix.stateChanged.connect(self.onPhoneNumberPrefix)# 档案相关self.archives = QLabel('档案相关:')# 复选框self.archives_all = QCheckBox('全选')self.profile = QCheckBox('档案(完整)')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.profile.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.profile.setFocusPolicy(QtCore.Qt.NoFocus)self.simple_profile = QCheckBox('档案(简单)')# 由于该方法暂时不能在Excel中生成,所以将其不能选择self.simple_profile.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)self.simple_profile.setFocusPolicy(QtCore.Qt.NoFocus)# 创建一个QHBoxLayoutself.archives_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.archives_widget.setContentsMargins(0, 0, 4280, 0)# 往QHBoxLayout添加复选框组件self.archives_widget.addWidget(self.archives_all)self.archives_widget.addWidget(self.profile)self.archives_widget.addWidget(self.simple_profile)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.archives, self.archives_widget)# 复选框选中、取消事件self.archives_all.stateChanged.connect(self.onArchivesAll)self.profile.stateChanged.connect(self.onProfile)self.simple_profile.stateChanged.connect(self.onSimpleProfile)# 身份证相关self.id_card = QLabel('身份证相关:')# 复选框self.id_card_all = QCheckBox('全选')self.ssn = QCheckBox('身份证')# 创建一个QHBoxLayoutself.id_card_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.id_card_widget.setContentsMargins(0, 0, 4415, 0)# 往QHBoxLayout添加复选框组件self.id_card_widget.addWidget(self.id_card_all)self.id_card_widget.addWidget(self.ssn)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.id_card, self.id_card_widget)# 复选框选中、取消事件self.id_card_all.stateChanged.connect(self.onIdCardAll)self.ssn.stateChanged.connect(self.onSsn)# 用户代理相关self.user_agentBe = QLabel('用户代理相关:')# 复选框self.user_agent_all = QCheckBox('全选')self.android_platform_token = QCheckBox('安卓')self.chrome = QCheckBox('Chrome')self.firefox = QCheckBox('FireFox')self.internet_explorer = QCheckBox('Ie')self.ios_platform_token = QCheckBox('ios')self.linux_platform_token = QCheckBox('Linux')self.linux_processor = QCheckBox('Linux处理器')self.mac_platform_token = QCheckBox('Mac')self.mac_processor = QCheckBox('Mac处理器')self.opera = QCheckBox('Opera')self.safari = QCheckBox('Safari')self.user_agent = QCheckBox('随机用户代理')self.windows_platform_token = QCheckBox('Windows')# 创建一个QHBoxLayoutself.user_agent_widget = QHBoxLayout()# 设置布局管理器的边界,防止组件自适用间距过大影响观感,分别为:左、上、右、下self.user_agent_widget.setContentsMargins(0, 0, 3500, 0)# 往QHBoxLayout添加复选框组件self.user_agent_widget.addWidget(self.user_agent_all)self.user_agent_widget.addWidget(self.android_platform_token)self.user_agent_widget.addWidget(self.chrome)self.user_agent_widget.addWidget(self.firefox)self.user_agent_widget.addWidget(self.internet_explorer)self.user_agent_widget.addWidget(self.ios_platform_token)self.user_agent_widget.addWidget(self.linux_platform_token)self.user_agent_widget.addWidget(self.linux_processor)self.user_agent_widget.addWidget(self.mac_platform_token)self.user_agent_widget.addWidget(self.mac_processor)self.user_agent_widget.addWidget(self.opera)self.user_agent_widget.addWidget(self.safari)self.user_agent_widget.addWidget(self.user_agent)self.user_agent_widget.addWidget(self.windows_platform_token)# 将QHBoxLayout添加进QFormLayout,这样可以防止addRow时出现参数过多的报错self.f_layout.addRow(self.user_agentBe, self.user_agent_widget)# 复选框选中、取消事件self.user_agent_all.stateChanged.connect(self.onUserAgentAll)self.android_platform_token.stateChanged.connect(self.onAndroidPlatformToken)self.chrome.stateChanged.connect(self.onChrome)self.firefox.stateChanged.connect(self.onFirefox)self.internet_explorer.stateChanged.connect(self.onInternetExplorer)self.ios_platform_token.stateChanged.connect(self.onIosPlatformToken)self.linux_platform_token.stateChanged.connect(self.onLinuxPlatformToken)self.linux_processor.stateChanged.connect(self.onLinuxProcessor)self.mac_platform_token.stateChanged.connect(self.onMacPlatformToken)self.mac_processor.stateChanged.connect(self.onMacProcessor)self.opera.stateChanged.connect(self.onOpera)self.safari.stateChanged.connect(self.onSafari)self.user_agent.stateChanged.connect(self.onUserAgent)self.windows_platform_token.stateChanged.connect(self.onWindowsPlatformToken)# 创建文本输入框self.pIntLineEdit = QLineEdit()# 创建输入框约束——只能输入数字self.pIntValidator = QIntValidator()# 给该输入框添加约束self.pIntLineEdit.setValidator(self.pIntValidator)# 限制输入字符数,过高会导致Excel行号不够,以至于程序崩溃,并会占用过多的内存,导致响应时间过长self.pIntLineEdit.setMaxLength(6)# 添加输入框到表单布局self.pIntLineEdit_widget = QHBoxLayout()self.pIntLineEdit_widget.addWidget(self.pIntLineEdit)self.pIntLineEdit_widget.setContentsMargins(0, 0, 4400, 0)self.f_layout.addRow("请输入生成数据的条数:", self.pIntLineEdit_widget)# 生成按钮self.createExcel = QPushButton('开始生成')# self.createExcel.setStyleSheet("color: #ffffff; background-color: rgb(87,174,231)")self.createExcel_widget = QHBoxLayout()self.createExcel_widget.addWidget(self.createExcel)self.createExcel_widget.setContentsMargins(0, 0, 3000, 0)self.f_layout.addRow(self.createExcel_widget)self.createExcel.clicked.connect(self.onCreateExcel)# 生成按钮self.createExcel1 = QPushButton('一键生成人物相关信息')# self.createExcel.setStyleSheet("color: #ffffff; background-color: rgb(87,174,231)")self.createExcel_widget1 = QHBoxLayout()self.createExcel_widget1.addWidget(self.createExcel1)self.createExcel_widget1.setContentsMargins(0, 0, 3000, 0)self.f_layout.addRow(self.createExcel_widget1)self.createExcel1.clicked.connect(self.onCreateExcel1)# 生成列标题self.line = ['序号']# 生成表地区语言格式self.form = []# 创建workbook用于生成Excelself.wb = workbook.Workbook()# 在Excel中创建一个工作表self.sheet = self.wb.worksheets[0]# 国家语种单选框选中事件,选中后给Faker赋值对应的国家编码def onChinaMainland(self, i):if i == True:self.fk = Faker(locale='zh_CN')def onChinaTaiwan(self, i):if i == True:self.fk = Faker(locale='zh_TW')def onEnglishUnitedStates(self, i):if i == True:self.fk = Faker(locale='en_US')def onEnglishGreatBritain(self, i):if i == True:self.fk = Faker(locale='en_GB')def onEnglishAustralia(self, i):if i == True:self.fk = Faker(locale='en_AU')def onEnglishCanada(self, i):if i == True:self.fk = Faker(locale='en_CA')def onEnglishNewZealand(self, i):if i == True:self.fk = Faker(locale='en_NZ')def onJapanese(self, i):if i == True:self.fk = Faker(locale='ja_JP')def onKorean(self, i):if i == True:self.fk = Faker(locale='ko_KR')def onGerman(self, i):if i == True:self.fk = Faker(locale='de_DE')def onFrench(self, i):if i == True:self.fk = Faker(locale='fr_FR')def onArabicEgypt(self, i):if i == True:self.fk = Faker(locale='ar_EG')def onArabicPalestine(self, i):if i == True:self.fk = Faker(locale='ar_PS')def onArabicSaudiArabia(self, i):if i == True:self.fk = Faker(locale='ar_SA')def onBulgarian(self, i):if i == True:self.fk = Faker(locale='bg_BG')def onBosnian(self, i):if i == True:self.fk = Faker(locale='bs_BA')def onCzech(self, i):if i == True:self.fk = Faker(locale='cs_CZ')def onDanish(self, i):if i == True:self.fk = Faker(locale='dk_DK')def onGreek(self, i):if i == True:self.fk = Faker(locale='el_GR')def onSpanishSpain(self, i):if i == True:self.fk = Faker(locale='es_ES')def onSpanishMexico(self, i):if i == True:self.fk = Faker(locale='es_MX')def onEstonian(self, i):if i == True:self.fk = Faker(locale='et_EE')def onPersianIran(self, i):if i == True:self.fk = Faker(locale='fa_IR')def onFinnish(self, i):if i == True:self.fk = Faker(locale='fi_FI')def onHindi(self, i):if i == True:self.fk = Faker(locale='hi_IN')def onCroatian(self, i):if i == True:self.fk = Faker(locale='hr_HR')def onHungarian(self, i):if i == True:self.fk = Faker(locale='hu_HU')def onArmenian(self, i):if i == True:self.fk = Faker(locale='hy_AM')def onItalian(self, i):if i == True:self.fk = Faker(locale='it_IT')def onGeorgianGeorgia(self, i):if i == True:self.fk = Faker(locale='ka_GE')def onLithuanian(self, i):if i == True:self.fk = Faker(locale='lt_LT')def onLatvian(self, i):if i == True:self.fk = Faker(locale='lv_LV')def onNepali(self, i):if i == True:self.fk = Faker(locale='ne_NP')def onDutchNetherlands(self, i):if i == True:self.fk = Faker(locale='nl_NL')def onNorwegian(self, i):if i == True:self.fk = Faker(locale='no_NO')def onPolish(self, i):if i == True:self.fk = Faker(locale='pl_PL')def onPortugueseBrazil(self, i):if i == True:self.fk = Faker(locale='pt_BR')def onPortuguesePortugal(self, i):if i == True:self.fk = Faker(locale='pt_PT')def onRomanian(self, i):if i == True:self.fk = Faker(locale='ro_RO')def onRussian(self, i):if i == True:self.fk = Faker(locale='ru_RU')def onSlovene(self, i):if i == True:self.fk = Faker(locale='sl_SI')def onSwedish(self, i):if i == True:self.fk = Faker(locale='sv_SE')def onTurkish(self, i):if i == True:self.fk = Faker(locale='tr_TR')def onUkrainian(self, i):if i == True:self.fk = Faker(locale='uk_UA')# 复选框选中事件,点击全选选中该组所有复选框def onAddressAll(self, i):if i == 2:self.address.setChecked(True)self.building_number.setChecked(True)self.city.setChecked(True)self.city_name.setChecked(True)self.city_suffix.setChecked(True)self.country.setChecked(True)self.country_code.setChecked(True)self.district.setChecked(True)self.postcode.setChecked(True)self.province.setChecked(True)self.street_address.setChecked(True)self.street_name.setChecked(True)self.street_suffix.setChecked(True)if i == 0:self.address.setChecked(False)self.building_number.setChecked(False)self.city.setChecked(False)self.city_name.setChecked(False)self.city_suffix.setChecked(False)self.country.setChecked(False)self.country_code.setChecked(False)self.district.setChecked(False)self.postcode.setChecked(False)self.province.setChecked(False)self.street_address.setChecked(False)self.street_name.setChecked(False)self.street_suffix.setChecked(False)# 将选中的值添加到line(列标题)里,用于后续判断要生成那些数据def onAddress(self, i):if i == 2:self.line.append('地址')if i == 0:self.line.remove('地址')def onBuildingNumber(self, i):if i == 2:self.line.append('楼名')if i == 0:self.line.remove('楼名')def onCity(self, i):if i == 2:self.line.append('完整城市名')if i == 0:self.line.remove('完整城市名')def onCityName(self, i):if i == 2:self.line.append('城市名(无市县)')if i == 0:self.line.remove('城市名(无市县)')def onCitySuffix(self, i):if i == 2:self.line.append('城市后缀名')if i == 0:self.line.remove('城市后缀名')def onCountry(self, i):if i == 2:self.line.append('国家名称')if i == 0:self.line.remove('国家名称')def onCountryCode(self, i):if i == 2:self.line.append('国家编号')if i == 0:self.line.remove('国家编号')def onDistrict(self, i):if i == 2:self.line.append('地区')if i == 0:self.line.remove('地区')def onPostcode(self, i):if i == 2:self.line.append('邮编')if i == 0:self.line.remove('邮编')def onProvince(self, i):if i == 2:self.line.append('省(中国)')if i == 0:self.line.remove('省(中国)')def onStreetAddress(self, i):if i == 2:self.line.append('街道地址')if i == 0:self.line.remove('街道地址')def onStreetName(self, i):if i == 2:self.line.append('街道名称')if i == 0:self.line.remove('街道名称')def onStreetSuffix(self, i):if i == 2:self.line.append('街道后缀名')if i == 0:self.line.remove('街道后缀名')def onAutomobileAll(self, i):if i == 2:self.license_plate.setChecked(True)if i == 0:self.license_plate.setChecked(False)def onLicensePlate(self, i):if i == 2:self.line.append('牌照')if i == 0:self.line.remove('牌照')def onBankAll(self, i):if i == 2:self.bank_country.setChecked(True)self.bban.setChecked(True)self.iban.setChecked(True)if i == 0:self.bank_country.setChecked(False)self.bban.setChecked(False)self.iban.setChecked(False)def onBankCountry(self, i):if i == 2:self.line.append('银行所属国家')if i == 0:self.line.remove('银行所属国家')def onBban(self, i):if i == 2:self.line.append('基本银行账号')if i == 0:self.line.remove('基本银行账号')def onIban(self, i):if i == 2:self.line.append('国际银行代码')if i == 0:self.line.remove('国际银行代码')def onBarCodeAll(self, i):if i == 2:self.ean.setChecked(True)self.ean13.setChecked(True)self.ean8.setChecked(True)if i == 0:self.ean.setChecked(False)self.ean13.setChecked(False)self.ean8.setChecked(False)def onEan(self, i):if i == 2:self.line.append('EAN条形码')if i == 0:self.line.remove('EAN条形码')def onEan13(self, i):if i == 2:self.line.append('EAN13条形码')if i == 0:self.line.remove('EAN13条形码')def onEan8(self, i):if i == 2:self.line.append('EAN8条形码')if i == 0:self.line.remove('EAN8条形码')def onColorAll(self, i):if i == 2:self.color_name.setChecked(True)self.hex_color.setChecked(True)self.rgb_color.setChecked(True)self.rgb_css_color.setChecked(True)self.safe_color_name.setChecked(True)self.safe_hex_color.setChecked(True)if i == 0:self.color_name.setChecked(False)self.hex_color.setChecked(False)self.rgb_color.setChecked(False)self.rgb_css_color.setChecked(False)self.safe_color_name.setChecked(False)self.safe_hex_color.setChecked(False)def onColorName(self, i):if i == 2:self.line.append('颜色名称')if i == 0:self.line.remove('颜色名称')def onHexColor(self, i):if i == 2:self.line.append('颜色十六进制值')if i == 0:self.line.remove('颜色十六进制值')def onRgbColor(self, i):if i == 2:self.line.append('颜色RGB值')if i == 0:self.line.remove('颜色RGB值')def onRgbCssColor(self, i):if i == 2:self.line.append('CSS颜色值')if i == 0:self.line.remove('CSS颜色值')def onSafeColorName(self, i):if i == 2:self.line.append('安全色')if i == 0:self.line.remove('安全色')def onSafeHexColor(self, i):if i == 2:self.line.append('安全色十六进制值')if i == 0:self.line.remove('安全色十六进制值')def onCompanyAll(self, i):if i == 2:self.bs.setChecked(True)self.catch_phrase.setChecked(True)self.company_name.setChecked(True)self.company_prefix.setChecked(True)self.company_suffix.setChecked(True)if i == 0:self.bs.setChecked(False)self.catch_phrase.setChecked(False)self.company_name.setChecked(False)self.company_prefix.setChecked(False)self.company_suffix.setChecked(False)def onBs(self, i):if i == 2:self.line.append('商业用词')if i == 0:self.line.remove('商业用词')def onCatchPhrase(self, i):if i == 2:self.line.append('妙句(口号)')if i == 0:self.line.remove('妙句(口号)')def onCompanyName(self, i):if i == 2:self.line.append('公司名称')if i == 0:self.line.remove('公司名称')def onCompanyPrefix(self, i):if i == 2:self.line.append('公司名称前缀')if i == 0:self.line.remove('公司名称前缀')def onCompanySuffix(self, i):if i == 2:self.line.append('公司名称后缀')if i == 0:self.line.remove('公司名称后缀')def onCreditCardsAll(self, i):if i == 2:self.credit_card_expire.setChecked(True)self.credit_card_full.setChecked(True)self.credit_card_number.setChecked(True)self.credit_card_provider.setChecked(True)self.credit_card_security_code.setChecked(True)if i == 0:self.credit_card_expire.setChecked(False)self.credit_card_full.setChecked(False)self.credit_card_number.setChecked(False)self.credit_card_provider.setChecked(False)self.credit_card_security_code.setChecked(False)def onCreditCardExpire(self, i):if i == 2:self.line.append('过期年月')if i == 0:self.line.remove('过期年月')def onCreditCardFull(self, i):if i == 2:self.line.append('完整信用卡信息')if i == 0:self.line.remove('完整信用卡信息')def onCreditCardNumber(self, i):if i == 2:self.line.append('信用卡卡号')if i == 0:self.line.remove('信用卡卡号')def onCreditCardProvider(self, i):if i == 2:self.line.append('信用卡提供商')if i == 0:self.line.remove('信用卡提供商')def onCreditCardSecurityCode(self, i):if i == 2:self.line.append('信用卡安全码')if i == 0:self.line.remove('信用卡安全码')def onMoneyAll(self, i):if i == 2:self.cryptocurrency.setChecked(False)self.cryptocurrency_code.setChecked(True)self.cryptocurrency_name.setChecked(True)self.currency.setChecked(False)self.currency_code.setChecked(True)self.currency_name.setChecked(True)if i == 0:self.cryptocurrency.setChecked(False)self.cryptocurrency_code.setChecked(False)self.cryptocurrency_name.setChecked(False)self.currency.setChecked(False)self.currency_code.setChecked(False)self.currency_name.setChecked(False)def onCryptocurrency(self, i):if i == 2:self.line.append('加密货币代码+名称')if i == 0:self.line.remove('加密货币代码+名称')def onCryptocurrencyCode(self, i):if i == 2:self.line.append('加密货币代码')if i == 0:self.line.remove('加密货币代码')def onCryptocurrencyName(self, i):if i == 2:self.line.append('加密货币名称')if i == 0:self.line.remove('加密货币名称')def onCurrency(self, i):if i == 2:self.line.append('货币代码+名称')if i == 0:self.line.remove('货币代码+名称')def onCurrencyCode(self, i):if i == 2:self.line.append('货币代码')if i == 0:self.line.remove('货币代码')def onCurrencyName(self, i):if i == 2:self.line.append('货币名称')if i == 0:self.line.remove('货币名称')def onTimeAll(self, i):if i == 2:self.am_pm.setChecked(True)self.century.setChecked(True)self.date.setChecked(True)self.date_between.setChecked(True)self.date_between_dates.setChecked(True)self.date_object.setChecked(True)self.date_of_birth.setChecked(True)self.date_this_century.setChecked(True)self.date_this_decade.setChecked(True)self.date_this_month.setChecked(True)self.date_this_year.setChecked(True)self.date_time.setChecked(True)self.date_time_ad.setChecked(True)self.date_time_between.setChecked(True)self.date_time_between_dates.setChecked(True)self.date_time_this_century.setChecked(True)self.date_time_this_decade.setChecked(True)self.date_time_this_month.setChecked(True)self.date_time_this_year.setChecked(True)self.day_of_month.setChecked(True)self.day_of_week.setChecked(True)self.future_date.setChecked(True)self.future_datetime.setChecked(True)self.iso8601.setChecked(True)self.month.setChecked(True)self.month_name.setChecked(True)self.past_date.setChecked(True)self.past_datetime.setChecked(True)self.time.setChecked(True)self.time_delta.setChecked(True)self.time_object.setChecked(True)self.timezone.setChecked(True)self.unix_time.setChecked(True)self.year.setChecked(True)if i == 0:self.am_pm.setChecked(False)self.century.setChecked(False)self.date.setChecked(False)self.date_between.setChecked(False)self.date_between_dates.setChecked(False)self.date_object.setChecked(False)self.date_of_birth.setChecked(False)self.date_this_century.setChecked(False)self.date_this_decade.setChecked(False)self.date_this_month.setChecked(False)self.date_this_year.setChecked(False)self.date_time.setChecked(False)self.date_time_ad.setChecked(False)self.date_time_between.setChecked(False)self.date_time_between_dates.setChecked(False)self.date_time_this_century.setChecked(False)self.date_time_this_decade.setChecked(False)self.date_time_this_month.setChecked(False)self.date_time_this_year.setChecked(False)self.day_of_month.setChecked(False)self.day_of_week.setChecked(False)self.future_date.setChecked(False)self.future_datetime.setChecked(False)self.iso8601.setChecked(False)self.month.setChecked(False)self.month_name.setChecked(False)self.past_date.setChecked(False)self.past_datetime.setChecked(False)self.time.setChecked(False)self.time_delta.setChecked(False)self.time_object.setChecked(False)self.timezone.setChecked(False)self.unix_time.setChecked(False)self.year.setChecked(False)def onAmPm(self, i):if i == 2:self.line.append('AM或PM')if i == 0:self.line.remove('AM或PM')def onCentury(self, i):if i == 2:self.line.append('世纪')if i == 0:self.line.remove('世纪')def onDate(self, i):if i == 2:self.line.append('日期字符串')if i == 0:self.line.remove('日期字符串')def onDateBetween(self, i):if i == 2:self.line.append('日期(限定范围)')if i == 0:self.line.remove('日期(限定范围)')def onDateBetweenDates(self, i):if i == 2:self.line.append('日期(同左)')if i == 0:self.line.remove('日期(同左)')def onDateObject(self, i):if i == 2:self.line.append('日期(最大限制)')if i == 0:self.line.remove('日期(最大限制)')def onDateOfBirth(self, i):if i == 2:self.line.append('出生日期')if i == 0:self.line.remove('出生日期')def onDateThisCentury(self, i):if i == 2:self.line.append('本世纪日期')if i == 0:self.line.remove('本世纪日期')def onDateThisDecade(self, i):if i == 2:self.line.append('本年代日期')if i == 0:self.line.remove('本年代日期')def onDateThisMonth(self, i):if i == 2:self.line.append('本月日期')if i == 0:self.line.remove('本月日期')def onDateThisYear(self, i):if i == 2:self.line.append('本年日期')if i == 0:self.line.remove('本年日期')def onDateTime(self, i):if i == 2:self.line.append('日期时间')if i == 0:self.line.remove('日期时间')def onDateTimeAd(self, i):if i == 2:self.line.append('日期时间(从001年1月1日到现在)')if i == 0:self.line.remove('日期时间(从001年1月1日到现在)')def onDateTimeBetween(self, i):if i == 2:self.line.append('日期时间(限定范围)')if i == 0:self.line.remove('日期时间(限定范围)')def onDateTimeBetweenDates(self, i):if i == 2:self.line.append('日期时间(同左)')if i == 0:self.line.remove('日期时间(同左)')def onDateTimeThisCentury(self, i):if i == 2:self.line.append('本世纪中的日期和时间')if i == 0:self.line.remove('本世纪中的日期和时间')def onDateTimeThisDecade(self, i):if i == 2:self.line.append('本年代中的日期和时间')if i == 0:self.line.remove('本年代中的日期和时间')def onDateTimeThisMonth(self, i):if i == 2:self.line.append('本月中的日期和时间')if i == 0:self.line.remove('本月中的日期和时间')def onDateTimeThisYear(self, i):if i == 2:self.line.append('本年中的日期和时间')if i == 0:self.line.remove('本年中的日期和时间')def onDayOfMonth(self, i):if i == 2:self.line.append('几号')if i == 0:self.line.remove('几号')def onDayOfWeek(self, i):if i == 2:self.line.append('星期几')if i == 0:self.line.remove('星期几')def onFutureDate(self, i):if i == 2:self.line.append('未来日期')if i == 0:self.line.remove('未来日期')def onFutureDatetime(self, i):if i == 2:self.line.append('未来日期和时间')if i == 0:self.line.remove('未来日期和时间')def onIso8601(self, i):if i == 2:self.line.append('iso8601格式日期和时间')if i == 0:self.line.remove('iso8601格式日期和时间')def onMonth(self, i):if i == 2:self.line.append('月份')if i == 0:self.line.remove('月份')def onMonthName(self, i):if i == 2:self.line.append('月份名称')if i == 0:self.line.remove('月份名称')def onPastDate(self, i):if i == 2:self.line.append('过去日期')if i == 0:self.line.remove('过去日期')def onPastDatetime(self, i):if i == 2:self.line.append('过去日期和时间')if i == 0:self.line.remove('过去日期和时间')def onTime(self, i):if i == 2:self.line.append('时间')if i == 0:self.line.remove('时间')def onTimeDelta(self, i):if i == 2:self.line.append('时间间隔')if i == 0:self.line.remove('时间间隔')def onTimeObject(self, i):if i == 2:self.line.append('时间(最大限制)')if i == 0:self.line.remove('时间(最大限制)')def onTimeSeries(self, i):if i == 2:self.line.append('时间序列')if i == 0:self.line.remove('时间序列')def onTimezone(self, i):if i == 2:self.line.append('时区')if i == 0:self.line.remove('时区')def onUnixTime(self, i):if i == 2:self.line.append('UNIX时间戳')if i == 0:self.line.remove('UNIX时间戳')def onYear(self, i):if i == 2:self.line.append('某年')if i == 0:self.line.remove('某年')def onFilesAll(self, i):if i == 2:self.file_extension.setChecked(True)self.file_name.setChecked(True)self.file_path.setChecked(True)self.mime_type.setChecked(True)self.unix_device.setChecked(True)self.unix_partition.setChecked(True)if i == 0:self.file_extension.setChecked(False)self.file_name.setChecked(False)self.file_path.setChecked(False)self.mime_type.setChecked(False)self.unix_device.setChecked(False)self.unix_partition.setChecked(False)def onFileExtension(self, i):if i == 2:self.line.append('文件扩展名')if i == 0:self.line.remove('文件扩展名')def onFileName(self, i):if i == 2:self.line.append('文件名')if i == 0:self.line.remove('文件名')def onFilePath(self, i):if i == 2:self.line.append('文件路径')if i == 0:self.line.remove('文件路径')def onMimeType(self, i):if i == 2:self.line.append('MIME类型')if i == 0:self.line.remove('MIME类型')def onUnixDevice(self, i):if i == 2:self.line.append('UNIX设备')if i == 0:self.line.remove('UNIX设备')def onUnixPartition(self, i):if i == 2:self.line.append('UNIX分区')if i == 0:self.line.remove('UNIX分区')def onCoOrdinateAll(self, i):if i == 2:self.coordinate.setChecked(True)self.latitude.setChecked(True)self.latlng.setChecked(False)self.local_latlng.setChecked(False)self.location_on_land.setChecked(False)self.longitude.setChecked(True)if i == 0:self.coordinate.setChecked(False)self.latitude.setChecked(False)self.latlng.setChecked(False)self.local_latlng.setChecked(False)self.location_on_land.setChecked(False)self.longitude.setChecked(False)def onCoordinate(self, i):if i == 2:self.line.append('坐标')if i == 0:self.line.remove('坐标')def onLatitude(self, i):if i == 2:self.line.append('纬度')if i == 0:self.line.remove('纬度')def onLatlng(self, i):if i == 2:self.line.append('经纬度')if i == 0:self.line.remove('经纬度')def onLocalLatlng(self, i):if i == 2:self.line.append('某个国家某地的经纬度')if i == 0:self.line.remove('某个国家某地的经纬度')def onLocationOnLand(self, i):if i == 2:self.line.append('地球上某个位置的经纬度')if i == 0:self.line.remove('地球上某个位置的经纬度')def onLongitude(self, i):if i == 2:self.line.append('经度')if i == 0:self.line.remove('经度')def onNetworkAll(self, i):if i == 2:self.ascii_company_email.setChecked(True)self.ascii_email.setChecked(True)self.ascii_free_email.setChecked(True)self.ascii_safe_email.setChecked(True)self.company_email.setChecked(True)self.domain_name.setChecked(True)self.domain_word.setChecked(True)self.email.setChecked(True)self.free_email.setChecked(True)self.free_email_domain.setChecked(True)self.hostname.setChecked(True)self.ipv4_network_class.setChecked(True)self.ipv4_private.setChecked(True)self.ipv4_public.setChecked(True)self.ipv6.setChecked(True)self.mac_address.setChecked(True)self.safe_email.setChecked(True)self.slug.setChecked(True)self.tld.setChecked(True)self.uri.setChecked(True)self.uri_extension.setChecked(True)self.uri_page.setChecked(True)self.uri_path.setChecked(True)self.url_schemes.setChecked(True)self.user_name.setChecked(True)if i == 0:self.ascii_company_email.setChecked(False)self.ascii_email.setChecked(False)self.ascii_free_email.setChecked(False)self.ascii_safe_email.setChecked(False)self.company_email.setChecked(False)self.domain_name.setChecked(False)self.domain_word.setChecked(False)self.email.setChecked(False)self.free_email.setChecked(False)self.free_email_domain.setChecked(False)self.hostname.setChecked(False)self.ipv4_network_class.setChecked(False)self.ipv4_private.setChecked(False)self.ipv4_public.setChecked(False)self.ipv6.setChecked(False)self.mac_address.setChecked(False)self.safe_email.setChecked(False)self.slug.setChecked(False)self.tld.setChecked(False)self.uri.setChecked(False)self.uri_extension.setChecked(False)self.uri_page.setChecked(False)self.uri_path.setChecked(False)self.url_schemes.setChecked(False)self.user_name.setChecked(False)def onAsciiCompanyEmail(self, i):if i == 2:self.line.append('企业邮箱(ascii编码)')if i == 0:self.line.remove('企业邮箱(ascii编码)')def onAsciiEmail(self, i):if i == 2:self.line.append('企业邮箱+免费邮箱(ascii编码)')if i == 0:self.line.remove('企业邮箱+免费邮箱(ascii编码)')def onAsciiFreeEmail(self, i):if i == 2:self.line.append('免费邮箱(ascii编码)')if i == 0:self.line.remove('免费邮箱(ascii编码)')def onAsciiSafeEmail(self, i):if i == 2:self.line.append('安全邮箱(ascii编码)')if i == 0:self.line.remove('安全邮箱(ascii编码)')def onCompanyEmail(self, i):if i == 2:self.line.append('企业邮箱')if i == 0:self.line.remove('企业邮箱')def onDomainName(self, i):if i == 2:self.line.append('域名')if i == 0:self.line.remove('域名')def onDomainWord(self, i):if i == 2:self.line.append('二级域名')if i == 0:self.line.remove('二级域名')def onEmail(self, i):if i == 2:self.line.append('企业邮箱+免费邮箱')if i == 0:self.line.remove('企业邮箱+免费邮箱')def onFreeEmail(self, i):if i == 2:self.line.append('免费邮箱')if i == 0:self.line.remove('免费邮箱')def onFreeEmailDomain(self, i):if i == 2:self.line.append('免费邮箱域名')if i == 0:self.line.remove('免费邮箱域名')def onHostname(self, i):if i == 2:self.line.append('主机名')if i == 0:self.line.remove('主机名')def onIpv4NetworkClass(self, i):if i == 2:self.line.append('ipv4网络等级')if i == 0:self.line.remove('ipv4网络等级')def onIpv4Private(self, i):if i == 2:self.line.append('私有ipv4')if i == 0:self.line.remove('私有ipv4')def onIpv4Public(self, i):if i == 2:self.line.append('公共ipv4')if i == 0:self.line.remove('公共ipv4')def onIpv6(self, i):if i == 2:self.line.append('ipv6')if i == 0:self.line.remove('ipv6')def onMacAddress(self, i):if i == 2:self.line.append('MAC地址')if i == 0:self.line.remove('MAC地址')def onSafeEmail(self, i):if i == 2:self.line.append('安全邮箱')if i == 0:self.line.remove('安全邮箱')def onSlug(self, i):if i == 2:self.line.append('URL中的slug')if i == 0:self.line.remove('URL中的slug')def onTld(self, i):if i == 2:self.line.append('顶级域名')if i == 0:self.line.remove('顶级域名')def onUri(self, i):if i == 2:self.line.append('URI(精确到文件)')if i == 0:self.line.remove('URI(精确到文件)')def onUriExtension(self, i):if i == 2:self.line.append('URI扩展')if i == 0:self.line.remove('URI扩展')def onUriPage(self, i):if i == 2:self.line.append('URI页')if i == 0:self.line.remove('URI页')def onUriPath(self, i):if i == 2:self.line.append('URI路径')if i == 0:self.line.remove('URI路径')def onUrlSchemes(self, i):if i == 2:self.line.append('URL(精确到路径)')if i == 0:self.line.remove('URL(精确到路径)')def onUserName(self, i):if i == 2:self.line.append('用户名')if i == 0:self.line.remove('用户名')def onBooksAll(self, i):if i == 2:self.isbn10.setChecked(True)self.isbn13.setChecked(True)if i == 0:self.isbn10.setChecked(False)self.isbn13.setChecked(False)def onIsbn10(self, i):if i == 2:self.line.append('ISBN-10图书编号')if i == 0:self.line.remove('ISBN-10图书编号')def onIsbn13(self, i):if i == 2:self.line.append('ISBN-13图书编号')if i == 0:self.line.remove('ISBN-13图书编号')def onPositionAll(self, i):if i == 2:self.job.setChecked(True)if i == 0:self.job.setChecked(False)def onJob(self, i):if i == 2:self.line.append('职位')if i == 0:self.line.remove('职位')def onTextAll(self, i):if i == 2:self.paragraph.setChecked(True)self.paragraphs.setChecked(False)self.sentence.setChecked(True)self.sentences.setChecked(False)self.text.setChecked(True)self.texts.setChecked(False)self.word.setChecked(True)self.words.setChecked(False)if i == 0:self.paragraph.setChecked(False)self.paragraphs.setChecked(False)self.sentence.setChecked(False)self.sentences.setChecked(False)self.text.setChecked(False)self.texts.setChecked(False)self.word.setChecked(False)self.words.setChecked(False)def onParagraph(self, i):if i == 2:self.line.append('单个段落')if i == 0:self.line.remove('单个段落')def onParagraphs(self, i):if i == 2:self.line.append('多个段落')if i == 0:self.line.remove('多个段落')def onSentence(self, i):if i == 2:self.line.append('单个句子')if i == 0:self.line.remove('单个句子')def onSentences(self, i):if i == 2:self.line.append('多个句子')if i == 0:self.line.remove('多个句子')def onText(self, i):if i == 2:self.line.append('单个文本')if i == 0:self.line.remove('单个文本')def onTexts(self, i):if i == 2:self.line.append('多个文本')if i == 0:self.line.remove('多个文本')def onWord(self, i):if i == 2:self.line.append('单个词语')if i == 0:self.line.remove('单个词语')def onWords(self, i):if i == 2:self.line.append('多个词语')if i == 0:self.line.remove('多个词语')def onCodeAll(self, i):if i == 2:self.binary.setChecked(False)self.boolean.setChecked(True)self.md5.setChecked(True)self.null_boolean.setChecked(True)self.password.setChecked(True)self.sha1.setChecked(True)self.sha256.setChecked(True)self.uuid4.setChecked(True)if i == 0:self.binary.setChecked(False)self.boolean.setChecked(False)self.md5.setChecked(False)self.null_boolean.setChecked(False)self.password.setChecked(False)self.sha1.setChecked(False)self.sha256.setChecked(False)self.uuid4.setChecked(False)def onBinary(self, i):if i == 2:self.line.append('二进制')if i == 0:self.line.remove('二进制')def onBoolean(self, i):if i == 2:self.line.append('布尔值')if i == 0:self.line.remove('布尔值')def onMd5(self, i):if i == 2:self.line.append('Md5')if i == 0:self.line.remove('Md5')def onNullBoolean(self, i):if i == 2:self.line.append('NULL+布尔值')if i == 0:self.line.remove('NULL+布尔值')def onPassword(self, i):if i == 2:self.line.append('密码')if i == 0:self.line.remove('密码')def onSha1(self, i):if i == 2:self.line.append('SHA1')if i == 0:self.line.remove('SHA1')def onSha256(self, i):if i == 2:self.line.append('SHA256')if i == 0:self.line.remove('SHA256')def onUuid4(self, i):if i == 2:self.line.append('UUID4')if i == 0:self.line.remove('UUID4')def onPeoplesAll(self, i):if i == 2:self.first_name.setChecked(True)self.first_name_female.setChecked(True)self.first_name_male.setChecked(True)self.first_romanized_name.setChecked(True)self.last_name.setChecked(True)self.last_name_female.setChecked(True)self.last_name_male.setChecked(True)self.last_romanized_name.setChecked(True)self.name.setChecked(True)self.name_female.setChecked(True)self.name_male.setChecked(True)self.prefix.setChecked(True)self.prefix_female.setChecked(True)self.prefix_male.setChecked(True)self.romanized_name.setChecked(True)self.suffix.setChecked(True)if i == 0:self.first_name.setChecked(False)self.first_name_female.setChecked(False)self.first_name_male.setChecked(False)self.first_romanized_name.setChecked(False)self.last_name.setChecked(False)self.last_name_female.setChecked(False)self.last_name_male.setChecked(False)self.last_romanized_name.setChecked(False)self.name.setChecked(False)self.name_female.setChecked(False)self.name_male.setChecked(False)self.prefix.setChecked(False)self.prefix_female.setChecked(False)self.prefix_male.setChecked(False)self.romanized_name.setChecked(False)self.suffix.setChecked(False)def onFirstName(self, i):if i == 2:self.line.append('名')if i == 0:self.line.remove('名')def onFirstNameFemale(self, i):if i == 2:self.line.append('名(女)')if i == 0:self.line.remove('名(女)')def onFirstNameMale(self, i):if i == 2:self.line.append('名(男)')if i == 0:self.line.remove('名(男)')def onFirstRomanizedName(self, i):if i == 2:self.line.append('名(罗马文)')if i == 0:self.line.remove('名(罗马文)')def onLastName(self, i):if i == 2:self.line.append('姓')if i == 0:self.line.remove('姓')def onLastNameFemale(self, i):if i == 2:self.line.append('姓(女)')if i == 0:self.line.remove('姓(女)')def onLastNameMale(self, i):if i == 2:self.line.append('姓(男)')if i == 0:self.line.remove('姓(男)')def onLastRomanizedName(self, i):if i == 2:self.line.append('姓(罗马文)')if i == 0:self.line.remove('姓(罗马文)')def onName(self, i):if i == 2:self.line.append('姓名')if i == 0:self.line.remove('姓名')def onNameFemale(self, i):if i == 2:self.line.append('姓名(女)')if i == 0:self.line.remove('姓名(女)')def onNameMale(self, i):if i == 2:self.line.append('姓名(男)')if i == 0:self.line.remove('姓名(男)')def onPrefix(self, i):if i == 2:self.line.append('称谓')if i == 0:self.line.remove('称谓')def onPrefixFemale(self, i):if i == 2:self.line.append('称谓(女)')if i == 0:self.line.remove('称谓(女)')def onPrefixMale(self, i):if i == 2:self.line.append('称谓(男)')if i == 0:self.line.remove('称谓(男)')def onRomanizedName(self, i):if i == 2:self.line.append('称谓(罗马文)')if i == 0:self.line.remove('称谓(罗马文)')def onSuffix(self, i):if i == 2:self.line.append('姓名后缀(中文不适用)')if i == 0:self.line.remove('姓名后缀(中文不适用)')def onPhoneAll(self, i):if i == 2:self.msisdn.setChecked(True)self.phone_number.setChecked(True)self.phonenumber_prefix.setChecked(True)if i == 0:self.msisdn.setChecked(False)self.phone_number.setChecked(False)self.phonenumber_prefix.setChecked(False)def onMsisdn(self, i):if i == 2:self.line.append('完整手机号码(包含国家和国内区号)')if i == 0:self.line.remove('完整手机号码(包含国家和国内区号)')def onPhoneNumber(self, i):if i == 2:self.line.append('手机号')if i == 0:self.line.remove('手机号')def onPhoneNumberPrefix(self, i):if i == 2:self.line.append('区号')if i == 0:self.line.remove('区号')def onArchivesAll(self, i):if i == 2:self.profile.setChecked(False)self.simple_profile.setChecked(False)if i == 0:self.profile.setChecked(False)self.simple_profile.setChecked(False)def onProfile(self, i):if i == 2:self.line.append('档案(完整)')if i == 0:self.line.remove('档案(完整)')def onSimpleProfile(self, i):if i == 2:self.line.append('档案(简单)')if i == 0:self.line.remove('档案(简单)')def onIdCardAll(self, i):if i == 2:self.ssn.setChecked(True)if i == 0:self.ssn.setChecked(False)def onSsn(self, i):if i == 2:self.line.append('身份证')if i == 0:self.line.remove('身份证')def onUserAgentAll(self, i):if i == 2:self.android_platform_token.setChecked(True)self.chrome.setChecked(True)self.firefox.setChecked(True)self.internet_explorer.setChecked(True)self.ios_platform_token.setChecked(True)self.linux_platform_token.setChecked(True)self.linux_processor.setChecked(True)self.mac_platform_token.setChecked(True)self.mac_processor.setChecked(True)self.opera.setChecked(True)self.safari.setChecked(True)self.user_agent.setChecked(True)self.windows_platform_token.setChecked(True)if i == 0:self.android_platform_token.setChecked(False)self.chrome.setChecked(False)self.firefox.setChecked(False)self.internet_explorer.setChecked(False)self.ios_platform_token.setChecked(False)self.linux_platform_token.setChecked(False)self.linux_processor.setChecked(False)self.mac_platform_token.setChecked(False)self.mac_processor.setChecked(False)self.opera.setChecked(False)self.safari.setChecked(False)self.user_agent.setChecked(False)self.windows_platform_token.setChecked(False)def onAndroidPlatformToken(self, i):if i == 2:self.line.append('安卓')if i == 0:self.line.remove('安卓')def onChrome(self, i):if i == 2:self.line.append('Chrome')if i == 0:self.line.remove('Chrome')def onFirefox(self, i):if i == 2:self.line.append('FireFox')if i == 0:self.line.remove('FireFox')def onInternetExplorer(self, i):if i == 2:self.line.append('Ie')if i == 0:self.line.remove('Ie')def onIosPlatformToken(self, i):if i == 2:self.line.append('ios')if i == 0:self.line.remove('ios')def onLinuxPlatformToken(self, i):if i == 2:self.line.append('Linux')if i == 0:self.line.remove('Linux')def onLinuxProcessor(self, i):if i == 2:self.line.append('Linux处理器')if i == 0:self.line.remove('Linux处理器')def onMacPlatformToken(self, i):if i == 2:self.line.append('Mac')if i == 0:self.line.remove('Mac')def onMacProcessor(self, i):if i == 2:self.line.append('Mac处理器')if i == 0:self.line.remove('Mac处理器')def onOpera(self, i):if i == 2:self.line.append('Opera')if i == 0:self.line.remove('Opera')def onSafari(self, i):if i == 2:self.line.append('Safari')if i == 0:self.line.remove('Safari')def onUserAgent(self, i):if i == 2:self.line.append('随机用户代理')if i == 0:self.line.remove('随机用户代理')def onWindowsPlatformToken(self, i):if i == 2:self.line.append('Windows')if i == 0:self.line.remove('Windows')# 生成按钮点击事件def onCreateExcel(self):# 判断:如果输入的条数不为空,则获取生成数据条数,否则给予默认值1(给第一行列名留位置)if self.pIntLineEdit.text() != '' and self.pIntLineEdit.text() is not None:self.num = int(self.pIntLineEdit.text())else:self.num = 1# 文件名file_name = "基础信息表.xlsx"# 判断文件是否被打开if not self.is_file_occupy(file_name):with open(file_name, mode='w', encoding='utf-8') as f:# 循环生成标题for num, item in enumerate(self.line, 1):self.sheet.cell(1, num).value = item# 生成内容for num, i in enumerate(range(1, int(self.num + 1)), 1):self.sheet.cell(i + 1, 1).value = numfor x, item in enumerate(self.line, 1):if item == '地址':self.sheet.cell(num + 1, x).value = self.fk.address()if item == '楼名':self.sheet.cell(num + 1, x).value = self.fk.building_number()if item == '完整城市名':self.sheet.cell(num + 1, x).value = self.fk.city()if item == '城市名(无市县)':self.sheet.cell(num + 1, x).value = self.fk.city_name()if item == '城市后缀名':self.sheet.cell(num + 1, x).value = self.fk.city_suffix()if item == '国家名称':self.sheet.cell(num + 1, x).value = self.fk.country()if item == '国家编号':self.sheet.cell(num + 1, x).value = self.fk.country_code()if item == '地区':self.sheet.cell(num + 1, x).value = self.fk.district()if item == '邮编':self.sheet.cell(num + 1, x).value = self.fk.postcode()if item == '省(中国)':self.sheet.cell(num + 1, x).value = self.fk.province()if item == '街道地址':self.sheet.cell(num + 1, x).value = self.fk.street_address()if item == '街道名称':self.sheet.cell(num + 1, x).value = self.fk.street_name()if item == '街道后缀名':self.sheet.cell(num + 1, x).value = self.fk.street_suffix()if item == '牌照':self.sheet.cell(num + 1, x).value = self.fk.license_plate()if item == '银行所属国家':self.sheet.cell(num + 1, x).value = self.fk.bank_country()if item == '基本银行账号':self.sheet.cell(num + 1, x).value = self.fk.bban()if item == '国际银行代码':self.sheet.cell(num + 1, x).value = self.fk.iban()if item == 'EAN条形码':self.sheet.cell(num + 1, x).value = self.fk.ean()if item == 'EAN13条形码':self.sheet.cell(num + 1, x).value = self.fk.ean13()if item == 'EAN8条形码':self.sheet.cell(num + 1, x).value = self.fk.ean8()if item == '颜色名称':self.sheet.cell(num + 1, x).value = self.fk.color_name()if item == '颜色十六进制值':self.sheet.cell(num + 1, x).value = self.fk.hex_color()if item == '颜色RGB值':self.sheet.cell(num + 1, x).value = self.fk.rgb_color()if item == 'CSS颜色值':self.sheet.cell(num + 1, x).value = self.fk.rgb_css_color()if item == '安全色':self.sheet.cell(num + 1, x).value = self.fk.safe_color_name()if item == '安全色十六进制值':self.sheet.cell(num + 1, x).value = self.fk.safe_hex_color()if item == '商业用词':self.sheet.cell(num + 1, x).value = self.fk.bs()if item == '妙句(口号)':self.sheet.cell(num + 1, x).value = self.fk.catch_phrase()if item == '公司名称':self.sheet.cell(num + 1, x).value = self.fk.company()if item == '公司名称前缀':self.sheet.cell(num + 1, x).value = self.fk.company_prefix()if item == '公司名称后缀':self.sheet.cell(num + 1, x).value = self.fk.company_suffix()if item == '过期年月':self.sheet.cell(num + 1, x).value = self.fk.credit_card_expire()if item == '完整信用卡信息':self.sheet.cell(num + 1, x).value = self.fk.credit_card_full()if item == '信用卡卡号':self.sheet.cell(num + 1, x).value = self.fk.credit_card_number()if item == '信用卡提供商':self.sheet.cell(num + 1, x).value = self.fk.credit_card_provider()if item == '信用卡安全码':self.sheet.cell(num + 1, x).value = self.fk.credit_card_security_code()if item == '加密货币代码+名称':self.sheet.cell(num + 1, x).value = self.fk.cryptocurrency()if item == '加密货币代码':self.sheet.cell(num + 1, x).value = self.fk.cryptocurrency_code()if item == '加密货币名称':self.sheet.cell(num + 1, x).value = self.fk.cryptocurrency_name()if item == '货币代码+名称':self.sheet.cell(num + 1, x).value = self.fk.currency()if item == '货币代码':self.sheet.cell(num + 1, x).value = self.fk.currency_code()if item == '货币名称':self.sheet.cell(num + 1, x).value = self.fk.currency_name()if item == 'AM或PM':self.sheet.cell(num + 1, x).value = self.fk.am_pm()if item == '世纪':self.sheet.cell(num + 1, x).value = self.fk.century()if item == '日期字符串':self.sheet.cell(num + 1, x).value = self.fk.date()if item == '日期(限定范围)':self.sheet.cell(num + 1, x).value = self.fk.date_between()if item == '日期(同左)':self.sheet.cell(num + 1, x).value = self.fk.date_between_dates()if item == '日期(最大限制)':self.sheet.cell(num + 1, x).value = self.fk.date_object()if item == '出生日期':self.sheet.cell(num + 1, x).value = self.fk.date_of_birth()if item == '本世纪日期':self.sheet.cell(num + 1, x).value = self.fk.date_this_century()if item == '本年代日期':self.sheet.cell(num + 1, x).value = self.fk.date_this_decade()if item == '本月日期':self.sheet.cell(num + 1, x).value = self.fk.date_this_month()if item == '本年日期':self.sheet.cell(num + 1, x).value = self.fk.date_this_year()if item == '日期时间':self.sheet.cell(num + 1, x).value = self.fk.date_time()if item == '日期时间(从001年1月1日到现在)':self.sheet.cell(num + 1, x).value = self.fk.date_time_ad()if item == '日期时间(限定范围)':self.sheet.cell(num + 1, x).value = self.fk.date_time_between()if item == '日期时间(同左)':self.sheet.cell(num + 1, x).value = self.fk.date_time_between_dates()if item == '本世纪中的日期和时间':self.sheet.cell(num + 1, x).value = self.fk.date_time_this_century()if item == '本年代中的日期和时间':self.sheet.cell(num + 1, x).value = self.fk.date_time_this_decade()if item == '本月中的日期和时间':self.sheet.cell(num + 1, x).value = self.fk.date_time_this_month()if item == '本年中的日期和时间':self.sheet.cell(num + 1, x).value = self.fk.date_time_this_year()if item == '几号':self.sheet.cell(num + 1, x).value = self.fk.day_of_month()if item == '星期几':self.sheet.cell(num + 1, x).value = self.fk.day_of_week()if item == '未来日期':self.sheet.cell(num + 1, x).value = self.fk.future_date()if item == '未来日期和时间':self.sheet.cell(num + 1, x).value = self.fk.future_datetime()if item == 'iso8601格式日期和时间':self.sheet.cell(num + 1, x).value = self.fk.iso8601()if item == '月份':self.sheet.cell(num + 1, x).value = self.fk.month()if item == '月份名称':self.sheet.cell(num + 1, x).value = self.fk.month_name()if item == '过去日期':self.sheet.cell(num + 1, x).value = self.fk.past_date()if item == '过去日期和时间':self.sheet.cell(num + 1, x).value = self.fk.past_datetime()if item == '时间':self.sheet.cell(num + 1, x).value = self.fk.time()if item == '时间间隔':self.sheet.cell(num + 1, x).value = self.fk.time_delta()if item == '时间(最大限制)':self.sheet.cell(num + 1, x).value = self.fk.time_object()if item == '时区':self.sheet.cell(num + 1, x).value = self.fk.timezone()if item == 'UNIX时间戳':self.sheet.cell(num + 1, x).value = self.fk.unix_time()if item == '某年':self.sheet.cell(num + 1, x).value = self.fk.year()if item == '文件扩展名':self.sheet.cell(num + 1, x).value = self.fk.file_extension()if item == '文件名':self.sheet.cell(num + 1, x).value = self.fk.file_name()if item == '文件路径':self.sheet.cell(num + 1, x).value = self.fk.file_path()if item == 'MIME类型':self.sheet.cell(num + 1, x).value = self.fk.mime_type()if item == 'UNIX设备':self.sheet.cell(num + 1, x).value = self.fk.unix_device()if item == 'UNIX分区':self.sheet.cell(num + 1, x).value = self.fk.unix_partition()if item == '坐标':self.sheet.cell(num + 1, x).value = self.fk.coordinate()if item == '纬度':self.sheet.cell(num + 1, x).value = self.fk.latitude()if item == '经纬度':self.sheet.cell(num + 1, x).value = self.fk.latlng()if item == '某个国家某地的经纬度':self.sheet.cell(num + 1, x).value = self.fk.local_latlng()if item == '地球上某个位置的经纬度':self.sheet.cell(num + 1, x).value = self.fk.location_on_land()if item == '经度':self.sheet.cell(num + 1, x).value = self.fk.longitude()if item == '企业邮箱(ascii编码)':self.sheet.cell(num + 1, x).value = self.fk.ascii_company_email()if item == '企业邮箱+免费邮箱(ascii编码)':self.sheet.cell(num + 1, x).value = self.fk.ascii_email()if item == '免费邮箱(ascii编码)':self.sheet.cell(num + 1, x).value = self.fk.ascii_free_email()if item == '安全邮箱(ascii编码)':self.sheet.cell(num + 1, x).value = self.fk.ascii_safe_email()if item == '企业邮箱':self.sheet.cell(num + 1, x).value = self.fk.company_email()if item == '域名':self.sheet.cell(num + 1, x).value = self.fk.domain_name()if item == '二级域名':self.sheet.cell(num + 1, x).value = self.fk.domain_word()if item == '企业邮箱+免费邮箱':self.sheet.cell(num + 1, x).value = self.fk.email()if item == '免费邮箱':self.sheet.cell(num + 1, x).value = self.fk.free_email()if item == '免费邮箱域名':self.sheet.cell(num + 1, x).value = self.fk.free_email_domain()if item == '主机名':self.sheet.cell(num + 1, x).value = self.fk.hostname()if item == '图片URL':self.sheet.cell(num + 1, x).value = self.fk.image_url()if item == 'ipv4':self.sheet.cell(num + 1, x).value = self.fk.ipv4()if item == 'ipv4网络等级':self.sheet.cell(num + 1, x).value = self.fk.ipv4_network_class()if item == '私有ipv4':self.sheet.cell(num + 1, x).value = self.fk.ipv4_private()if item == '公共ipv4':self.sheet.cell(num + 1, x).value = self.fk.ipv4_public()if item == 'ipv6':self.sheet.cell(num + 1, x).value = self.fk.ipv6()if item == 'MAC地址':self.sheet.cell(num + 1, x).value = self.fk.mac_address()if item == '安全邮箱':self.sheet.cell(num + 1, x).value = self.fk.safe_email()if item == 'URL中的slug':self.sheet.cell(num + 1, x).value = self.fk.slug()if item == '顶级域名':self.sheet.cell(num + 1, x).value = self.fk.tld()if item == 'URI(精确到文件)':self.sheet.cell(num + 1, x).value = self.fk.uri()if item == 'URI扩展':self.sheet.cell(num + 1, x).value = self.fk.uri_extension()if item == 'URI页':self.sheet.cell(num + 1, x).value = self.fk.uri_page()if item == 'URI路径':self.sheet.cell(num + 1, x).value = self.fk.uri_path()if item == 'URL(精确到路径)':self.sheet.cell(num + 1, x).value = self.fk.url()if item == '用户名':self.sheet.cell(num + 1, x).value = self.fk.user_name()if item == 'ISBN-10图书编号':self.sheet.cell(num + 1, x).value = self.fk.isbn10()if item == 'ISBN-13图书编号':self.sheet.cell(num + 1, x).value = self.fk.isbn13()if item == '职位':self.sheet.cell(num + 1, x).value = self.fk.job()if item == '单个段落':self.sheet.cell(num + 1, x).value = self.fk.paragraph()if item == '多个段落':self.sheet.cell(num + 1, x).value = self.fk.paragraphs()if item == '单个句子':self.sheet.cell(num + 1, x).value = self.fk.sentence()if item == '多个句子':self.sheet.cell(num + 1, x).value = self.fk.sentences()if item == '单个文本':self.sheet.cell(num + 1, x).value = self.fk.text()if item == '多个文本':self.sheet.cell(num + 1, x).value = self.fk.texts()if item == '单个词语':self.sheet.cell(num + 1, x).value = self.fk.word()if item == '多个词语':self.sheet.cell(num + 1, x).value = self.fk.words()if item == '二进制':self.sheet.cell(num + 1, x).value = self.fk.binary()if item == '布尔值':self.sheet.cell(num + 1, x).value = self.fk.boolean()if item == 'Md5':self.sheet.cell(num + 1, x).value = self.fk.md5()if item == 'NULL+布尔值':self.sheet.cell(num + 1, x).value = self.fk.null_boolean()if item == '密码':self.sheet.cell(num + 1, x).value = self.fk.password()if item == 'SHA1':self.sheet.cell(num + 1, x).value = self.fk.sha1()if item == 'SHA256':self.sheet.cell(num + 1, x).value = self.fk.sha256()if item == 'UUID4':self.sheet.cell(num + 1, x).value = self.fk.uuid4()if item == '名':self.sheet.cell(num + 1, x).value = self.fk.first_name()if item == '名(女)':self.sheet.cell(num + 1, x).value = self.fk.first_name_female()if item == '名(男)':self.sheet.cell(num + 1, x).value = self.fk.first_name_male()if item == '名(罗马文)':self.sheet.cell(num + 1, x).value = self.fk.first_romanized_name()if item == '姓':self.sheet.cell(num + 1, x).value = self.fk.last_name()if item == '姓(女)':self.sheet.cell(num + 1, x).value = self.fk.last_name_female()if item == '姓(男)':self.sheet.cell(num + 1, x).value = self.fk.last_name_male()if item == '姓(罗马文)':self.sheet.cell(num + 1, x).value = self.fk.last_romanized_name()if item == '姓名':self.sheet.cell(num + 1, x).value = self.fk.name()if item == '姓名(女)':self.sheet.cell(num + 1, x).value = self.fk.name_female()if item == '姓名(男)':self.sheet.cell(num + 1, x).value = self.fk.name_male()if item == '称谓':self.sheet.cell(num + 1, x).value = self.fk.prefix()if item == '称谓(女)':self.sheet.cell(num + 1, x).value = self.fk.prefix_female()if item == '称谓(男)':self.sheet.cell(num + 1, x).value = self.fk.prefix_male()if item == '称谓(罗马文)':self.sheet.cell(num + 1, x).value = self.fk.romanized_name()if item == '姓名后缀(中文不适用)':self.sheet.cell(num + 1, x).value = self.fk.suffix()if item == '完整手机号码(包含国家和国内区号)':self.sheet.cell(num + 1, x).value = self.fk.msisdn()if item == '手机号':self.sheet.cell(num + 1, x).value = self.fk.phone_number()if item == '区号':self.sheet.cell(num + 1, x).value = self.fk.phonenumber_prefix()if item == '档案(完整)':self.sheet.cell(num + 1, x).value = self.fk.profile()if item == '档案(简单)':self.sheet.cell(num + 1, x).value = self.fk.simple_profile()if item == '身份证':self.sheet.cell(num + 1, x).value = self.fk.ssn()if item == '安卓':self.sheet.cell(num + 1, x).value = self.fk.android_platform_token()if item == 'Chrome':self.sheet.cell(num + 1, x).value = self.fk.chrome()if item == 'FireFox':self.sheet.cell(num + 1, x).value = self.fk.firefox()if item == 'Ie':self.sheet.cell(num + 1, x).value = self.fk.internet_explorer()if item == 'ios':self.sheet.cell(num + 1, x).value = self.fk.ios_platform_token()if item == 'Linux':self.sheet.cell(num + 1, x).value = self.fk.linux_platform_token()if item == 'Linux处理器':self.sheet.cell(num + 1, x).value = self.fk.linux_processor()if item == 'Mac':self.sheet.cell(num + 1, x).value = self.fk.mac_platform_token()if item == 'Mac处理器':self.sheet.cell(num + 1, x).value = self.fk.mac_processor()if item == 'Opera':self.sheet.cell(num + 1, x).value = self.fk.opera()if item == 'Safari':self.sheet.cell(num + 1, x).value = self.fk.safari()if item == '随机用户代理':self.sheet.cell(num + 1, x).value = self.fk.user_agent()if item == 'Windows':self.sheet.cell(num + 1, x).value = self.fk.windows_platform_token()self.wb.save(file_name)msg_box = QMessageBox(QMessageBox.Warning, '提示', '数据生成成功')msg_box.exec_()else:msg_box = QMessageBox(QMessageBox.Warning, '提示', '生成文件被占用,请关闭后再试')msg_box.exec_()# 一键生成人物按钮def onCreateExcel1(self):# 判断:如果输入的条数不为空,则获取生成数据条数,否则给予默认值1(给第一行列名留位置)if self.pIntLineEdit.text() != '' and self.pIntLineEdit.text() is not None:self.num = int(self.pIntLineEdit.text())else:self.num = 1# 列标题self.line = ['序号', '姓名', '年龄', '性别', '身份证', '电话号码', '出生日期', '所属省(中国)', '所属市', '所属街道', '详细地址', '所属公司', '工作职位','车牌号', '银行账号', '信用卡卡号', '企业邮箱', '个人邮箱', '用户名', '主机名', 'IPV4地址', 'IPV6地址', 'MAC地址']file_name = "人员基础信息表.xlsx"if not self.is_file_occupy(file_name):with open(file_name, mode='w', encoding='utf-8') as f:for num, item in enumerate(self.line, 1):self.sheet.cell(1, num).value = itemfor num, i in enumerate(range(1, self.num), 1):gender = random.choice(['男', '女'])self.sheet.cell(i + 1, 1).value = numself.sheet.cell(i + 1, 2).value = self.fk.name()self.sheet.cell(i + 1, 3).value = random.randint(1, 100)self.sheet.cell(i + 1, 4).value = genderself.sheet.cell(i + 1, 5).value = self.fk.ssn()self.sheet.cell(i + 1, 6).value = self.fk.phone_number()self.sheet.cell(i + 1, 7).value = self.fk.date_of_birth()self.sheet.cell(i + 1, 8).value = self.fk.province()self.sheet.cell(i + 1, 9).value = self.fk.city()self.sheet.cell(i + 1, 10).value = self.fk.street_address()self.sheet.cell(i + 1, 11).value = self.fk.address()self.sheet.cell(i + 1, 12).value = self.fk.company()self.sheet.cell(i + 1, 13).value = self.fk.job()self.sheet.cell(i + 1, 14).value = self.fk.license_plate()self.sheet.cell(i + 1, 15).value = self.fk.bban()self.sheet.cell(i + 1, 16).value = self.fk.credit_card_number()self.sheet.cell(i + 1, 17).value = self.fk.ascii_company_email()self.sheet.cell(i + 1, 18).value = self.fk.ascii_free_email()self.sheet.cell(i + 1, 19).value = self.fk.user_name()self.sheet.cell(i + 1, 20).value = self.fk.hostname()self.sheet.cell(i + 1, 21).value = self.fk.ipv4()self.sheet.cell(i + 1, 22).value = self.fk.ipv6()self.sheet.cell(i + 1, 23).value = self.fk.mac_address()self.wb.save(file_name)msg_box = QMessageBox(QMessageBox.Warning, '提示', '人物数据一键生成成功')# 数据生成成功后清除全局变量数据,以防影响到后续功能使用self.line = []  # 清除列msg_box.exec_()else:msg_box = QMessageBox(QMessageBox.Warning, '提示', '生成文件被占用,请关闭后再试')msg_box.exec_()# 判断文件是否被占用def is_file_occupy(self, file_name):try:occupy = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING,win32file.FILE_ATTRIBUTE_NORMAL, None)return int(occupy) == win32file.INVALID_HANDLE_VALUEexcept:return Truefinally:try:win32file.CloseHandle(occupy)except:passif __name__ == "__main__":app = QtWidgets.QApplication(sys.argv)MainWindow = QtWidgets.QMainWindow()ui = Main()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())

结束语

  因为这个东西刚写完不久,使用的次数也不多,还有很多问题要改,很多地方需要优化,大家在使用过程中出现了问题,或有什么优化意见欢迎在评论区回复或私聊我。
  
  还有一个问题一直困扰着我,在我使用pyinstaller将该项目打包成exe文件,运行会报错如下错误。为此我翻阅了很多相关博客和GitHub,至今没有找到解决办法,大概是Faker和pyinstaller有着某些冲突,如有哪位大佬能够提供一个解决办法,我将感激不尽。

Traceback (most recent call last):File "ForgePeople.py", line 1131, in onChinaMainlandFile "faker\proxy.py", line 72, in __init__File "faker\factory.py", line 43, in create
AttributeError: Invalid configuration for faker locale `zh_CN`[已退出进程,代码为 3221226505]

  
  我坚持“分享知识”的原则,免费透明的将全部代码公开展示,并提供力所能及的技术支持。

Python模拟数据生成器全代码相关推荐

  1. SQL Father - 模拟数据生成器(后端)

    SQL Father - 模拟数据生成器(后端) SQL 之父项目:快速生成 SQL 和模拟数据,大幅提高开发测试效率! 前后端全栈项目 By 程序员鱼皮 制作不易,请勿商用和二次售卖!!! 在线体验 ...

  2. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. 总结 ...

  3. 材料模拟python_用Python模拟无限生成器

    我正在尝试使用模拟库模拟无限生成器函数. (如果您使用Python 3.3,则为unittest.mock) 这是无限生成器的最小工作示例.如果我可以成功地模拟它,那么我希望能够模拟我正在使用的实际功 ...

  4. python代码块-python小数据池,代码块的最详细、深入剖析

    一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是 ...

  5. python小数据池,代码块的最详细、深入剖析

    一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都 ...

  6. python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码

    Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候... 正态分布(Normaldistribution),也称"常态分布",又名高斯分布(Gaussiandi ...

  7. python导入数据画柱状图代码_在Linux下使用Python的matplotlib绘制数据图的教程

    如果你想要在Linxu中获得一个高效.自动化.高质量的科学画图的解决方案,应该考虑尝试下matplotlib库.Matplotlib是基于python的开源科学测绘包,基于python软件基金会许可证 ...

  8. python处理数据的一些代码

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.如何读取txt文件,将其转化为DataFrame格式 二.给DataFrame添加列名 三.删除指定行 四.读取csv文 ...

  9. python模拟预测孩子身高代码_想知道孩子将来能长多高?用这套公式,多数人都说准...

    宝强夫妇的身高都不算特别高,当初结婚的时候就担心将来孩子的身高会受到自己的影响,所以从孩子出生开始,宝强就想尽办法给孩子补充营养.加强锻炼,希望孩子能把后天的优势发挥出来.在孩子刚出生时,宝强曾经根据 ...

  10. python比较数据工具_Python模拟数据工具哪些比较好用

    今天给大家推荐两款基本的Python模拟数据工具:mock和pytest monkeypatch. 为什么要模拟数据? 我们的应用中有一些部分需要依赖外部的库或对象.为了隔离开这部分,我们需要代替这些 ...

最新文章

  1. Java云托管服务的开支削减策略
  2. java 变量分配_Java中成员变量分配在哪个空间?
  3. java 不用if_Java 不用for不用if写出九九乘法表算法
  4. python中参数(带星号的参数)
  5. 前沿分享|阿里云数据库高级技术专家 宋利兵:阿里云企业级自治数据库RDS详解
  6. redis笔记——redis事务及锁应用
  7. L13操作系统之树(过程)
  8. Java 算法 找素数
  9. ajax获取session值_cookie和session基础知识学习
  10. 利用Python网络爬虫抓取微信好友的签名及其可视化展示
  11. 必看谈谈数据库的锁机制!!
  12. mount、umount 挂载卸载命令
  13. 移植wireless extension
  14. Sketch 56.2 Mac中文版
  15. 笔记本电脑计算机目录下无法显示视频设备,笔记本摄像头怎么开 win7笔记本摄像头打开方法...
  16. 三、Allan方差分析
  17. JSON for modern c++ / nlohmann
  18. Centos7.5安装redis
  19. GPS跟踪载波环matlab代码,GPS接收机载波跟踪环路解决方案
  20. 【Python】笨方法学Python学习笔记1

热门文章

  1. 实现一个Android锁屏App的难点总结
  2. python爬虫英文单词_利用PYTHON 爬虫爬出自己的英语单词库
  3. Elasticsearch索引yellow修复
  4. 多人联机——Photon插件的是使用
  5. dns被劫持怎么办?网页总是跳转到别的、你的DNS可能被劫持了!
  6. 子域名在线查询网站推荐
  7. LOG4cxx安装指南
  8. 【Firefly云手机】最高可虚拟720台手机,支持一键操控,应用多开
  9. Python爬取豆瓣电影top250(附全部源码)
  10. JAVA多线程并发之线程实现,4种线程池,终止线程4种方式