关于
本课堂点名器由好友Yish研发...
本人吗....贡献了(发现了)不少Issues...
由于原作者迫于学业压力,一个致命的Bug就由我来修。
项目原文:一键直达
Github地址:https://github.com/Yish1/Class-Roster-Picker
维修实录
根据作者自述:
课堂点名器3.X 是由Python制作的。
本文根据:
“3.9版本中已知问题 Known Issues”
非数字崩溃问题
当连抽输入为非数字时“”,int(num)将传递空信息导致崩溃。
这便是致命Bug!
在于作者的沟通中可知:
程序是由PyQt5库及其衍生搭建,可以用PyQt5的语句限制用户的输入类型。
但是...我也不会啊!
根据作者提供的源码,用VScode跑一遍
当我输入字母“o”时,报错内容为
Traceback (most recent call last):
File "c:\Users\Administrator\Desktop\dm2.py", line 381, in ten
num = int(num)
ValueError: invalid literal for int() with base 10: 'o'
可知错误在:
num = int(num)
应该是当非数字字符输入时,程序无法处理,导致崩溃。
这就好办了!
在处理输入前加入对输入的分析就可以了
while True:
ten=input("x:")
try:
x=eval(ten)
if type(x)==int:break
except:
pass
再配合源码里的函数,就可以把源码改成...
while True: #检验数字
t=num
try:
num=eval(t)
if type(num)==int:
break
except:
reply = QtWidgets.QMessageBox.warning(self, u'警告', u'请输入数字!!!', QtWidgets.QMessageBox.Yes)
return
num = int(num)
目前问题已解决..
请放心食用!
例外,我还测试到了一个彩蛋(Bug)
当你输入的是算式如:16-9
它的连抽次数就会是7
因为这个输入符合了Python的语法
有空可以去试试
DPI问题
②屏幕DPI为125%时无法完全显示文字(已通过pyqt5开发文档中高DPI模式自适应代码修复,但似乎在部分设备上不起作用)
这个是属于ui问题了吧...
def setupUi(self, MainWindow):
#以下课直接粘贴生成的setupui代码
MainWindow.setObjectName("13班点名器By Yish")
MainWindow.resize(460, 400)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30,45, 470, 150))#主体
font = QtGui.QFont()
font.setFamily("宋体")
font.setPointSize(50)#主体大小
看看代码...(最后一句)
主体大小?
有没有一种可能打错了,是字体大小...
于是,我开始上网寻找“pyqt文字自适应”
找是找到了,但是...
看不懂...也不会用...
于是,我开始搜索“python获取屏幕DPI”
在不断的搜索中...找到了一篇
from win32 import win32api, win32gui, win32print
from win32.lib import win32con
"""获取缩放后的分辨率"""
sX = win32api.GetSystemMetrics(0) #获得屏幕分辨率X轴
sY = win32api.GetSystemMetrics(1) #获得屏幕分辨率Y轴
print(sX)
print(sY)
"""获取真实的分辨率"""
hDC = win32gui.GetDC(0)
w = win32print.GetDeviceCaps(hDC, win32con.DESKTOPHORZRES) # 横向分辨率
h = win32print.GetDeviceCaps(hDC, win32con.DESKTOPVERTRES) # 纵向分辨率
print(w)
print(h)
# 缩放比率
screen_scale_rate = round(w / sX, 2)
print(screen_scale_rate)
当屏幕缩放为100%时,最后一项输出1.0
当屏幕缩放为125%时,最后一项输出1.25
这不正好用得上吗,还可以避开pyqt
经过测试:
当屏幕DPI为125%时,字体大小40为最佳
放入代码的开始部分
去除输出
增加一个“dpi”“zt”做变量
编写一个简单的“if”判断语句
dpi = screen_scale_rate
if dpi == 1.0:
zt = 50
elif dpi == 1.25:
zt = 40
再把zt放入原代码
font.setPointSize(zt)#主体大小
测试...完工...
Windows32位不兼容问题
④不支持32位设备
这个好说...
但现在大家也很少用32位系统了吧...
由于Windows系统会向下兼容
直接在老机器上跑一遍,封装...
关于环境
pip install PyQt5 安装方法
1,首先要安装
pip install sip
2,pip 要版本足够,pip 升级方法:
python -m pip install --upgrade pip
3,pip install PyQt5安装超时方法:
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
4,安装PyQt5-tools:
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyinstaller
Pyinstaller -F -w -i 123.ico *.py
3.999无Bug版本:一键下载
Comments | 2 条评论
博主 Yish_
666666666666666666666
博主 QQBRoy
@Yish_