迁移 指定题号编译pdf(选题编译)

This commit is contained in:
weiye.wang 2024-04-25 20:33:55 +08:00
parent a477a7309a
commit bf48ed8e1f
4 changed files with 799 additions and 1 deletions

View File

@ -0,0 +1,256 @@
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file '指定题号编译pdf.ui'
##
## Created by: Qt User Interface Compiler version 6.6.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QHBoxLayout, QLabel,
QLineEdit, QPlainTextEdit, QPushButton, QRadioButton,
QSizePolicy, QVBoxLayout, QWidget)
class Ui_Form(object):
def setupUi(self, Form):
if not Form.objectName():
Form.setObjectName(u"Form")
Form.resize(760, 490)
self.pushButton_exec = QPushButton(Form)
self.pushButton_exec.setObjectName(u"pushButton_exec")
self.pushButton_exec.setGeometry(QRect(500, 279, 221, 131))
font = QFont()
font.setBold(True)
self.pushButton_exec.setFont(font)
self.label_3 = QLabel(Form)
self.label_3.setObjectName(u"label_3")
self.label_3.setGeometry(QRect(300, 79, 61, 16))
self.lineEdit_path = QLineEdit(Form)
self.lineEdit_path.setObjectName(u"lineEdit_path")
self.lineEdit_path.setGeometry(QRect(300, 99, 421, 20))
self.pushButton_SelectPath = QPushButton(Form)
self.pushButton_SelectPath.setObjectName(u"pushButton_SelectPath")
self.pushButton_SelectPath.setGeometry(QRect(640, 69, 81, 24))
self.verticalLayoutWidget = QWidget(Form)
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
self.verticalLayoutWidget.setGeometry(QRect(300, 139, 81, 271))
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.label_4 = QLabel(self.verticalLayoutWidget)
self.label_4.setObjectName(u"label_4")
self.label_4.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.verticalLayout.addWidget(self.label_4)
self.radioButton_student = QRadioButton(self.verticalLayoutWidget)
self.radioButton_student.setObjectName(u"radioButton_student")
self.radioButton_student.setChecked(True)
self.verticalLayout.addWidget(self.radioButton_student)
self.radioButton_teacher = QRadioButton(self.verticalLayoutWidget)
self.radioButton_teacher.setObjectName(u"radioButton_teacher")
self.verticalLayout.addWidget(self.radioButton_teacher)
self.verticalLayoutWidget_2 = QWidget(Form)
self.verticalLayoutWidget_2.setObjectName(u"verticalLayoutWidget_2")
self.verticalLayoutWidget_2.setGeometry(QRect(400, 139, 91, 271))
self.verticalLayout_2 = QVBoxLayout(self.verticalLayoutWidget_2)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
self.label_5 = QLabel(self.verticalLayoutWidget_2)
self.label_5.setObjectName(u"label_5")
self.verticalLayout_2.addWidget(self.label_5)
self.checkBox_space = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_space.setObjectName(u"checkBox_space")
self.verticalLayout_2.addWidget(self.checkBox_space)
self.checkBox_ans = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_ans.setObjectName(u"checkBox_ans")
self.verticalLayout_2.addWidget(self.checkBox_ans)
self.checkBox_objs = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_objs.setObjectName(u"checkBox_objs")
self.checkBox_objs.setCheckable(True)
self.checkBox_objs.setTristate(False)
self.verticalLayout_2.addWidget(self.checkBox_objs)
self.checkBox_tags = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_tags.setObjectName(u"checkBox_tags")
self.verticalLayout_2.addWidget(self.checkBox_tags)
self.checkBox_solution = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_solution.setObjectName(u"checkBox_solution")
self.verticalLayout_2.addWidget(self.checkBox_solution)
self.checkBox_usages = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_usages.setObjectName(u"checkBox_usages")
self.verticalLayout_2.addWidget(self.checkBox_usages)
self.checkBox_origin = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_origin.setObjectName(u"checkBox_origin")
self.verticalLayout_2.addWidget(self.checkBox_origin)
self.checkBox_remark = QCheckBox(self.verticalLayoutWidget_2)
self.checkBox_remark.setObjectName(u"checkBox_remark")
self.verticalLayout_2.addWidget(self.checkBox_remark)
self.verticalLayoutWidget_3 = QWidget(Form)
self.verticalLayoutWidget_3.setObjectName(u"verticalLayoutWidget_3")
self.verticalLayoutWidget_3.setGeometry(QRect(500, 139, 222, 121))
self.verticalLayout_usagepanel = QVBoxLayout(self.verticalLayoutWidget_3)
self.verticalLayout_usagepanel.setObjectName(u"verticalLayout_usagepanel")
self.verticalLayout_usagepanel.setContentsMargins(0, 0, 0, 0)
self.label_6 = QLabel(self.verticalLayoutWidget_3)
self.label_6.setObjectName(u"label_6")
self.verticalLayout_usagepanel.addWidget(self.label_6)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.label_9 = QLabel(self.verticalLayoutWidget_3)
self.label_9.setObjectName(u"label_9")
self.horizontalLayout.addWidget(self.label_9)
self.lineEdit_high = QLineEdit(self.verticalLayoutWidget_3)
self.lineEdit_high.setObjectName(u"lineEdit_high")
self.lineEdit_high.setEnabled(True)
self.horizontalLayout.addWidget(self.lineEdit_high)
self.label_10 = QLabel(self.verticalLayoutWidget_3)
self.label_10.setObjectName(u"label_10")
self.horizontalLayout.addWidget(self.label_10)
self.lineEdit_low = QLineEdit(self.verticalLayoutWidget_3)
self.lineEdit_low.setObjectName(u"lineEdit_low")
self.horizontalLayout.addWidget(self.lineEdit_low)
self.verticalLayout_usagepanel.addLayout(self.horizontalLayout)
self.label_7 = QLabel(self.verticalLayoutWidget_3)
self.label_7.setObjectName(u"label_7")
self.verticalLayout_usagepanel.addWidget(self.label_7)
self.lineEdit_grades = QLineEdit(self.verticalLayoutWidget_3)
self.lineEdit_grades.setObjectName(u"lineEdit_grades")
self.verticalLayout_usagepanel.addWidget(self.lineEdit_grades)
self.plainTextEdit_allitems = QPlainTextEdit(Form)
self.plainTextEdit_allitems.setObjectName(u"plainTextEdit_allitems")
self.plainTextEdit_allitems.setGeometry(QRect(30, 219, 261, 191))
self.label = QLabel(Form)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(30, 199, 54, 16))
self.label_2 = QLabel(Form)
self.label_2.setObjectName(u"label_2")
self.label_2.setGeometry(QRect(31, 50, 60, 16))
self.plainTextEdit_newitems = QPlainTextEdit(Form)
self.plainTextEdit_newitems.setObjectName(u"plainTextEdit_newitems")
self.plainTextEdit_newitems.setGeometry(QRect(30, 69, 261, 71))
self.layoutWidget = QWidget(Form)
self.layoutWidget.setObjectName(u"layoutWidget")
self.layoutWidget.setGeometry(QRect(40, 149, 241, 28))
self.horizontalLayout_4 = QHBoxLayout(self.layoutWidget)
self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.pushButton_add = QPushButton(self.layoutWidget)
self.pushButton_add.setObjectName(u"pushButton_add")
self.horizontalLayout_4.addWidget(self.pushButton_add)
self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.pushButton_delete = QPushButton(self.layoutWidget)
self.pushButton_delete.setObjectName(u"pushButton_delete")
self.horizontalLayout_3.addWidget(self.pushButton_delete)
self.horizontalLayout_2 = QHBoxLayout()
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.label_11 = QLabel(self.layoutWidget)
self.label_11.setObjectName(u"label_11")
self.label_11.setMaximumSize(QSize(20, 16777215))
self.horizontalLayout_2.addWidget(self.label_11)
self.lineEdit_index = QLineEdit(self.layoutWidget)
self.lineEdit_index.setObjectName(u"lineEdit_index")
self.lineEdit_index.setMaximumSize(QSize(20, 16777215))
self.horizontalLayout_2.addWidget(self.lineEdit_index)
self.label_12 = QLabel(self.layoutWidget)
self.label_12.setObjectName(u"label_12")
self.label_12.setMaximumSize(QSize(20, 16777215))
self.horizontalLayout_2.addWidget(self.label_12)
self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
self.horizontalLayout_4.addLayout(self.horizontalLayout_3)
self.retranslateUi(Form)
QMetaObject.connectSlotsByName(Form)
# setupUi
def retranslateUi(self, Form):
Form.setWindowTitle(QCoreApplication.translate("Form", u"\u6307\u5b9a\u9898\u53f7\u7f16\u8bd1", None))
self.pushButton_exec.setText(QCoreApplication.translate("Form", u"\u5f00\u59cb\u751f\u6210\u4e0e\u7f16\u8bd1", None))
self.label_3.setText(QCoreApplication.translate("Form", u"\u6587\u4ef6\u8def\u5f84", None))
self.pushButton_SelectPath.setText(QCoreApplication.translate("Form", u"\u9009\u62e9\u8def\u5f84", None))
self.label_4.setText(QCoreApplication.translate("Form", u"\u7248\u5f0f\u9009\u62e9", None))
self.radioButton_student.setText(QCoreApplication.translate("Form", u"\u5b66\u751f\u7248", None))
self.radioButton_teacher.setText(QCoreApplication.translate("Form", u"\u6559\u5e08\u7248", None))
self.label_5.setText(QCoreApplication.translate("Form", u"\u5185\u5bb9\u9009\u9879", None))
self.checkBox_space.setText(QCoreApplication.translate("Form", u"\u9898\u540e\u7a7a\u95f4", None))
self.checkBox_ans.setText(QCoreApplication.translate("Form", u"\u7b54\u6848", None))
self.checkBox_objs.setText(QCoreApplication.translate("Form", u"\u8bfe\u65f6\u76ee\u6807", None))
self.checkBox_tags.setText(QCoreApplication.translate("Form", u"\u9898\u76ee\u6807\u7b7e", None))
self.checkBox_solution.setText(QCoreApplication.translate("Form", u"\u89e3\u7b54\u4e0e\u63d0\u793a", None))
self.checkBox_usages.setText(QCoreApplication.translate("Form", u"\u4f7f\u7528\u8bb0\u5f55", None))
self.checkBox_origin.setText(QCoreApplication.translate("Form", u"\u6765\u6e90", None))
self.checkBox_remark.setText(QCoreApplication.translate("Form", u"\u5907\u6ce8", None))
self.label_6.setText(QCoreApplication.translate("Form", u"\u4f7f\u7528\u8bb0\u5f55\u9009\u62e9(\u90fd\u7559\u7a7a\u4e3a\u5168\u663e\u793a)", None))
self.label_9.setText(QCoreApplication.translate("Form", u"\u9ad8", None))
self.label_10.setText(QCoreApplication.translate("Form", u"\u4f4e", None))
self.label_7.setText(QCoreApplication.translate("Form", u"\u5c4a\u522b\u9009\u62e9(\u7528 \",\" \u5206\u9694, \u7559\u7a7a\u4e3a\u5168\u663e\u793a)", None))
self.label.setText(QCoreApplication.translate("Form", u"\u9898\u53f7\u5217\u8868", None))
self.label_2.setText(QCoreApplication.translate("Form", u"\u6807\u9898\u4e0e\u9898\u53f7", None))
self.plainTextEdit_newitems.setPlaceholderText(QCoreApplication.translate("Form", u"\u5982: \u96c6\u5408: 2:30,32 \u6216 \"\u96c6\u5408\": \"2:30\", \"\u51fd\u6570\": \"5,60,71:75\"(\u53ef\u6709\u56de\u8f66)", None))
self.pushButton_add.setText(QCoreApplication.translate("Form", u"\u6dfb\u52a0\u4e00\u9879\u6216\u591a\u9879", None))
self.pushButton_delete.setText(QCoreApplication.translate("Form", u"\u5220\u53bb\u4e00\u9879", None))
self.label_11.setText(QCoreApplication.translate("Form", u"\u7b2c", None))
self.label_12.setText(QCoreApplication.translate("Form", u"\u9879", None))
# retranslateUi

View File

@ -9,6 +9,7 @@ from 讲义结构与内容录入 import MyWindow_jglr
from 答题纸对应 import MyWindow_dtlr from 答题纸对应 import MyWindow_dtlr
from 获取题号 import MyWindow_hqth from 获取题号 import MyWindow_hqth
from 单一题号转为图片 import MyWindow_sctp from 单一题号转为图片 import MyWindow_sctp
from 指定题号编译pdf import MyWindow_xtby
from database_tools_2 import * from database_tools_2 import *
class MyWindow(QMainWindow,Ui_MainWindow): class MyWindow(QMainWindow,Ui_MainWindow):
@ -24,6 +25,10 @@ class MyWindow(QMainWindow,Ui_MainWindow):
self.pushButton_tiku.clicked.connect(self.SelectTIKU) self.pushButton_tiku.clicked.connect(self.SelectTIKU)
self.pushButton_tikutest.clicked.connect(self.SelectTIKUTEST) #以上为设置当前数据库的两个按钮 self.pushButton_tikutest.clicked.connect(self.SelectTIKUTEST) #以上为设置当前数据库的两个按钮
self.layout_xtby = QVBoxLayout(self.tab_xtby)
self.xtby = MyWindow_xtby(self.database)
self.layout_xtby.addWidget(self.xtby) #以上三行为初始化“选题编译”tab
self.layout_sctp = QVBoxLayout(self.tab_sctp) self.layout_sctp = QVBoxLayout(self.tab_sctp)
self.sctp = MyWindow_sctp(self.database) self.sctp = MyWindow_sctp(self.database)
self.layout_sctp.addWidget(self.sctp) #以上三行为初始化“生成图片”tab self.layout_sctp.addWidget(self.sctp) #以上三行为初始化“生成图片”tab
@ -61,7 +66,8 @@ class MyWindow(QMainWindow,Ui_MainWindow):
for func in [ for func in [
self.kxth.setdbname, self.kxth.setdbname,
self.jysc.setdbname, self.jysc.setdbname,
self.sctp.setdbname self.sctp.setdbname,
self.xtby.setdbname
]: #在列表中的tab里传送数据库名的连接 ]: #在列表中的tab里传送数据库名的连接
self.sendDBname.connect(func) self.sendDBname.connect(func)
def sendValue(self): def sendValue(self):

View File

@ -0,0 +1,167 @@
from PySide6.QtWidgets import QWidget, QApplication, QFileDialog
from Ui_指定题号编译pdf import Ui_Form
import os
from database_tools_2 import *
class MyWindow_xtby(QWidget,Ui_Form):
def __init__(self,database_name):
super().__init__()
self.database_name = database_name
self.setupUi(self)
self.bind()
def setdbname(self,string):
self.database_name = string
print(self.database_name)
def bind(self):
outputpath = os.path.join(os.getcwd(),"临时文件")
self.lineEdit_path.setText(outputpath)
self.TitleID_list = []
self.TeachersCheckBoxList = [self.checkBox_ans,self.checkBox_objs,self.checkBox_tags,self.checkBox_solution,self.checkBox_usages,self.checkBox_origin,self.checkBox_remark]
self.StudentsCheckBoxList = [self.checkBox_space,self.checkBox_ans]
self.ContnetCheckBoxList = [self.checkBox_ans,self.checkBox_objs,self.checkBox_tags,self.checkBox_solution,self.checkBox_usages,self.checkBox_origin,self.checkBox_remark,self.checkBox_space]
for widget in self.ContnetCheckBoxList:
widget.setDisabled(True)
self.studentlayout()
self.disableusagessetting()
self.pushButton_exec.clicked.connect(self.saveandbuild)
self.pushButton_add.clicked.connect(self.additems)
self.pushButton_delete.clicked.connect(self.deleteitem)
self.pushButton_SelectPath.clicked.connect(self.selectpath)
self.radioButton_teacher.clicked.connect(self.teacherlayout)
self.radioButton_student.clicked.connect(self.studentlayout)
self.checkBox_usages.clicked.connect(self.toggleusagessetting)
self.radioButton_student.clicked.connect(self.toggleusagessetting)
self.radioButton_teacher.clicked.connect(self.toggleusagessetting)
def selectpath(self):
outputpath = QFileDialog.getExistingDirectory(self,"选择文件夹")
self.lineEdit_path.setText(outputpath)
def additems(self):
toAddString = self.plainTextEdit_newitems.toPlainText()
try:
toAddList = TitleIDStringtoTupleList(toAddString)
self.TitleID_list += toAddList.copy()
except:
print("待添加字符串格式有误, 请检查")
self.plainTextEdit_allitems.setPlainText(TitleIDTupleListtoString(self.TitleID_list))
def deleteitem(self):
enum = int(self.lineEdit_index.text())-1
self.TitleID_list.pop(enum)
self.plainTextEdit_allitems.setPlainText(TitleIDTupleListtoString(self.TitleID_list))
def disableusagessetting(self):
self.lineEdit_high.setDisabled(True)
self.lineEdit_low.setDisabled(True)
self.lineEdit_grades.setDisabled(True)
def enableusagessetting(self):
self.lineEdit_high.setEnabled(True)
self.lineEdit_low.setEnabled(True)
self.lineEdit_grades.setEnabled(True)
def toggleusagessetting(self):
if self.checkBox_usages.isChecked() and self.radioButton_teacher.isChecked():
self.enableusagessetting()
else:
self.disableusagessetting()
def studentlayout(self):
for widget in self.TeachersCheckBoxList:
widget.setDisabled(True)
for widget in self.StudentsCheckBoxList:
widget.setEnabled(True)
def teacherlayout(self):
for widget in self.StudentsCheckBoxList:
widget.setDisabled(True)
for widget in self.TeachersCheckBoxList:
widget.setEnabled(True)
def generate_usages(self):
high = self.lineEdit_high.text().strip()
low = self.lineEdit_low.text().strip()
if self.checkBox_usages.isChecked() == False:
return [-2,-2]
elif self.checkBox_usages.isChecked() and high == "" and low == "":
return [-1,-1]
else:
if high == "":
high = "0"
if low == "":
low = "0"
return [int(high),int(low)]
def saveandbuild(self):
if self.radioButton_teacher.isChecked() and self.checkBox_usages.isChecked() and not self.lineEdit_grades.text().strip() == "":
grades = self.lineEdit_grades.text().strip().split(",")
else:
grades = []
# prodictpath = "../题库0.3/Problems.json"
# objdictpath = "../题库0.3/LessonObj.json"
# raw_pro_dict = load_dict(prodictpath)
# pro_dict = select_grade_from_pro_dict(raw_pro_dict,grades)
# obj_dict = load_dict(objdictpath)
configjson = {
"教师版": self.radioButton_teacher.isChecked(),
"字段显示设置": {
"题后空间": self.checkBox_space.isChecked(),
"课时目标": self.checkBox_objs.isChecked(),
"题目标签": self.checkBox_tags.isChecked(),
"答案": self.checkBox_ans.isChecked(),
"解答与提示": self.checkBox_solution.isChecked(),
"使用记录": self.generate_usages(),
"来源": self.checkBox_origin.isChecked(),
"备注": self.checkBox_remark.isChecked(),
"届别": grades
}
}
notetitle = "选题编译"
outputdir = self.lineEdit_path.text() #输出文件的目录
outputfilepath = os.path.join(outputdir,notetitle+".tex")
print("输出文件目录: %s\n输出文件名: %s"%(outputdir,notetitle+".tex"))
latex_raw = ReadTextFile("模板文件/讲义模板.txt")
if configjson["教师版"] == True:
latex_raw = latex_raw.replace(r"学号\blank{50} \ 姓名\blank{80}","上海市控江中学")
if sys.platform != "win32": #非win系统用默认字体
latex_raw = re.sub(r"fontset[\s]*=[\s]*none","fontset = fandol",latex_raw)
latex_raw = re.sub(r"\\setCJKmainfont",r"% \\setCJKmainfont",latex_raw)
bodystring = "\\tableofcontents\n\n\\newpage\n\n"
bodylist = []
# problems_dict = configjson["标题与题号"]
starttime = time.time()
mydb = connect(hostname = db_host, port = db_port, username=db_user, pwd=db_pwd, db = self.database_name)
mycursor = mydb.cursor()
for p,IDs in self.TitleID_list:
currentbodystring = f"\\section{{{p}}}\n\\begin{{enumerate}}\n\n"
print(f"正在从数据库获取数据, 生成源代码...")
for id in tqdm.tqdm(generate_number_set(IDs)):
currentbodystring += generateLaTeXBodyContentfromMariaDB(mycursor,id,configjson)
currentbodystring += "\\end{enumerate}"
bodylist.append(currentbodystring)
bodystring += "\n\n\\newpage\n\n".join(bodylist)
midtime = time.time()
print(f"生成LaTeX文件所花时间: {midtime-starttime:.3f}")
latex_data = StringSubstitute(r"<<[\s\S]*?待替换[\s\S]*?>>",latex_raw,(notetitle,bodystring)) #替换标题和bodystring
SaveTextFile(latex_data,outputfilepath) #保存.tex文件
if XeLaTeXCompile(outputdir,notetitle+".tex"):
print("编译成功")
else:
print("编译失败")
endtime = time.time()
print(f"生成pdf文件所花时间: {endtime-midtime:.3f}")
self.close()
startfile(self.lineEdit_path.text())
if __name__ == '__main__':
app = QApplication([])
windows = MyWindow()
windows.show()
app.exec()

View File

@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>760</width>
<height>490</height>
</rect>
</property>
<property name="windowTitle">
<string>指定题号编译</string>
</property>
<widget class="QPushButton" name="pushButton_exec">
<property name="geometry">
<rect>
<x>500</x>
<y>279</y>
<width>221</width>
<height>131</height>
</rect>
</property>
<property name="font">
<font>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>开始生成与编译</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>300</x>
<y>79</y>
<width>61</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>文件路径</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_path">
<property name="geometry">
<rect>
<x>300</x>
<y>99</y>
<width>421</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButton_SelectPath">
<property name="geometry">
<rect>
<x>640</x>
<y>69</y>
<width>81</width>
<height>24</height>
</rect>
</property>
<property name="text">
<string>选择路径</string>
</property>
</widget>
<widget class="QWidget" name="verticalLayoutWidget">
<property name="geometry">
<rect>
<x>300</x>
<y>139</y>
<width>81</width>
<height>271</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_4">
<property name="text">
<string>版式选择</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_student">
<property name="text">
<string>学生版</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_teacher">
<property name="text">
<string>教师版</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_2">
<property name="geometry">
<rect>
<x>400</x>
<y>139</y>
<width>91</width>
<height>271</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>内容选项</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_space">
<property name="text">
<string>题后空间</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_ans">
<property name="text">
<string>答案</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_objs">
<property name="text">
<string>课时目标</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_tags">
<property name="text">
<string>题目标签</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_solution">
<property name="text">
<string>解答与提示</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_usages">
<property name="text">
<string>使用记录</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_origin">
<property name="text">
<string>来源</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_remark">
<property name="text">
<string>备注</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="verticalLayoutWidget_3">
<property name="geometry">
<rect>
<x>500</x>
<y>139</y>
<width>222</width>
<height>121</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_usagepanel">
<item>
<widget class="QLabel" name="label_6">
<property name="text">
<string>使用记录选择(都留空为全显示)</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>高</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_high">
<property name="enabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>低</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_low"/>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_7">
<property name="text">
<string>届别选择(用 &quot;,&quot; 分隔, 留空为全显示)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_grades"/>
</item>
</layout>
</widget>
<widget class="QPlainTextEdit" name="plainTextEdit_allitems">
<property name="geometry">
<rect>
<x>30</x>
<y>219</y>
<width>261</width>
<height>191</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>30</x>
<y>199</y>
<width>54</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>题号列表</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>31</x>
<y>50</y>
<width>60</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>标题与题号</string>
</property>
</widget>
<widget class="QPlainTextEdit" name="plainTextEdit_newitems">
<property name="geometry">
<rect>
<x>30</x>
<y>69</y>
<width>261</width>
<height>71</height>
</rect>
</property>
<property name="placeholderText">
<string>如: 集合: 2:30,32 或 &quot;集合&quot;: &quot;2:30&quot;, &quot;函数&quot;: &quot;5,60,71:75&quot;(可有回车)</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>40</x>
<y>149</y>
<width>241</width>
<height>28</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QPushButton" name="pushButton_add">
<property name="text">
<string>添加一项或多项</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QPushButton" name="pushButton_delete">
<property name="text">
<string>删去一项</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_11">
<property name="maximumSize">
<size>
<width>20</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>第</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_index">
<property name="maximumSize">
<size>
<width>20</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_12">
<property name="maximumSize">
<size>
<width>20</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>项</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>