怎样在网站上做免费的推广网站做商城
怎样在网站上做免费的推广,网站做商城,商城网站建设套餐,ipv6做网站tkinter绘制组件#xff08;48#xff09;——日期与时间滚动选择器引言多种格式选项文本居中选中项居中选中指定初始指定手动指定效果github项目pip下载引言
TinUI的日期与时间选择器非原版TinUI功能控件#xff0c;需安装tinuipicker库#xff1a;
pip install tinuipi…tkinter绘制组件48——日期与时间滚动选择器引言多种格式选项文本居中选中项居中选中指定初始指定手动指定效果github项目pip下载引言TinUI的日期与时间选择器非原版TinUI功能控件需安装tinuipicker库pip install tinuipicker项目地址Smart-Space/TinUIPicker: TinUI高级滚动选择器。在用AI为TinUI写日期滚动选值框-CSDN博客一文中讲解了日期滚动选择器本文不再赘述而是以另一个控件——时间选择器——讲解新的picker相较于原版picker的改进细节。多种格式tinuipicker的时间选择器允许12小时和24小时默认制同时可以指定是否让秒可选。以上格式通过初始化参数指定classTinUITimePicker:def__init__(self,tinui,pos,font(微软雅黑,10),is_24hTrue,show_secTrue,nowdatetime.now(),commandNone,anchornw,**kwargs):# ...ifself.is_24h:self.res_hourstr(now.hour).zfill(2)self.res_ampmelse:hnow.hour self.res_ampmAMifh12elsePMh12h%12self.res_hourstr(12ifh120elseh12).zfill(2)# ...对应到视图元素则在_setup_picker_ui中确定选择器的数量和尺寸。def_setup_picker_ui(self):初始化 Toplevel 弹出层及其内部选择列# 根据制式动态计算宽度col_widths[50,60,60,60]ifnotself.is_24helse[60,60,60]ifnotself.show_sec:col_widths.pop()widthsum(col_widths)(len(col_widths)*3)12height260# ...选项文本居中TinUI原版picker中选项均为左对齐在这里改为居中显示def_loaddata(self,box,items,mw,col_type):填充列数据并绑定滚动与点击box.delete(all)box.choices{}y_ptr5foriinitems:text_idbox.create_text((mw/2,y_ptr2),texti,fillself.cfg[fg],fontself.font,anchorn)# ...# ...选中项居中TinUI原版picker中不具有该功能。在日期和时间选择器中会将当前选择项不一定已经确认尽可能放在选择器中间。具体实现就是判断当前选项中心和视图中心的单位差再除以总可滚动区域的高度就可以得到纵向视图的位置要求0~1。defshow(self,event):动画显示弹出框# 选中项居中foriinrange(len(self.pickerbars)):bboxself.pickerbars[i].bbox(self.sel_backs[i])centery(bbox[1]bbox[3])/2view_centeryself.pickerbars[i].winfo_height()/2scroll_regionself.pickerbars[i].cget(scrollregion).split()scroll_y1,scroll_y2int(scroll_region[1]),int(scroll_region[3])total_heightscroll_y2-scroll_y1 self.pickerbars[i].yview_moveto((centery-view_centery)/total_height)# ...self.sel_backs记录了当前被选择项目的背景元素。选中指定初始指定初始化通过now参数指定的时间会以如下方式绑定到后端数据# 小时初始化代码已在上文提及data_sets.append([str(m).zfill(2)forminrange(0,60)])# 分ifself.show_sec:data_sets.append([str(s).zfill(2)forsinrange(0,60)])# 秒在_loaddata会判定当前选项文本是否被选中def_loaddata(self,box,items,mw,col_type):填充列数据并绑定滚动与点击box.delete(all)box.choices{}y_ptr5foriinitems:#...is_sel(ibox.newres)ifis_sel:self.sel_backs.append(back_id)box.itemconfig(back_id,fillself.cfg[onbg])box.itemconfig(text_id,fillself.cfg[onfg])#...# ...手动指定TinUITimePicker提供set_time方法用于指定选中时间defset_time(self,hour:intNone,minute:intNone,second:intNone):base_index0ifself.is_24helse1ifhourisnotNone:ifnotself.is_24h:ifhour12:hour-12_,t,_,_next(islice(self.pickerbars[0].choices.values(),1,2))else:_,t,_,_next(islice(self.pickerbars[0].choices.values(),0,1))self._pick_sel_it(self.pickerbars[0],t,0)_,t,_,_next(islice(self.pickerbars[base_index].choices.values(),hour-1,hour))self._pick_sel_it(self.pickerbars[base_index],t,base_index)ifminuteisnotNone:indexminute _,t,_,_next(islice(self.pickerbars[base_index1].choices.values(),index,index1))self._pick_sel_it(self.pickerbars[base_index1],t,base_index1)ifsecondisnotNoneandself.show_sec:indexsecond _,t,_,_next(islice(self.pickerbars[base_index2].choices.values(),index,index1))self._pick_sel_it(self.pickerbars[base_index2],t,base_index2)self._confirm()每个选项均各自选中后调用_confirm进行确定避免功能完全相同的代码的重复。另外要注意的是这里的分钟和秒的执行判断为is not None因为0分、0秒是可选的。效果github项目TinUI的github项目地址pip下载pipinstalltinui