1.çè±ä»£ç ç¼ç¨python(ç«ç°è±ä»£ç ç¼ç¨python)
2.UI交互版本李峋python爱心代码 (附源码)
3.Python+mysql+tkinter+matplotlib的可视化学生成绩管理系统课程设计(文末附源码)
4.PythonTkinterå¸å±ç®¡çå¨ä¹Gridå¸å±ç®¡çå¨è¯¦è§£
5.PythonTkinterç»ä»¶ä¹Canvas
6.用python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用
çè±ä»£ç ç¼ç¨python(ç«ç°è±ä»£ç ç¼ç¨python)
æ¾çè±ç代ç
#-*-coding:utf-8-*-importmath,random,timeimportthreadingimporttkinterastkimportreuuidFireworks=[]maxFireworks=8height,width=,classfirework(object):def__init__(self,color,speed,width,height):=uuid.uuid1()self.radius=random.randint(2,4)~4åç´ self.color=colorself.speed=speed.5-3.5ç§self.status=0ï¼status=0ï¼çç¸åï¼status=1ï¼å½statusæ¶ï¼çè±ççå½æç»æ¢self.nParticle=random.randint(,)self.center=[random.randint(0,width-1),random.randint(0,height-1)]self.oneParticle=[]ï¼%ç¶ææ¶ï¼self.rotTheta=random.uniform(0,2*math.pi)ï¼x=a*cos(theta),y=b*sin(theta)=[a,b]
pythonç«é ·çè±è¡¨ç½æºä»£ç æ¯å¤å°ï¼å¦å®æ¬æç¨åï¼ä½ ä¹è½ååºè¿æ ·ççè±ç§ã
å¦ä¸å¾ç¤ºï¼æ们è¿ééè¿è®©ç»é¢ä¸ä¸ä¸ªç²ååè£ä¸ºXæ°éçç²åæ¥æ¨¡æçç¸ææãç²åä¼åçï¼è¨èâï¼æææ¯å®ä»¬ä¼ä»¥æé移å¨ä¸ç¸äºä¹é´çè§åº¦ç¸çãè¿æ ·å°±è½è®©æ们以ä¸ä¸ªåå¤è¨èçååå½¢å¼æ¨¡æåºçè±ç»½æ¾çç»é¢ã
ç»è¿ä¸å®æ¶é´åï¼ç²åä¼è¿å ¥ï¼èªç±è½ä½âé¶æ®µï¼ä¹å°±æ¯ç±äºéåå ç´ å®ä»¬å¼å§å è½å°å°é¢ï¼ä»¿è¥ç»½æ¾åççççè±ã
åºæ¬ç¥è¯ï¼ç¨PythonåTkinter设计çè±ã
è¿éä¸åä¸è¡èææ°å¦ç¥è¯å ¨ä¸¢åºæ¥ï¼æ们边å代ç 边说ç论ãé¦å ï¼ç¡®ä¿ä½ å®è£ åå¯¼å ¥äºTkinterï¼å®æ¯Pythonçæ åGUIåºï¼å¹¿æ³åºç¨äºåç§åæ ·ç项ç®åç¨åºå¼åï¼å¨Pythonä¸ä½¿ç¨Tkinterå¯ä»¥å¿«éçå建GUIåºç¨ç¨åºã
importtkinterastk
fromPILimportImage,ImageTk
fromtimeimporttime,sleep
fromrandomimportchoice,uniform,randint
frommathimportsin,cos,radians
é¤äºTkinterä¹å¤ï¼ä¸ºäºè½è®©çé¢ææ¼äº®çèæ¯ï¼æ们ä¹å¯¼å ¥PILç¨äºå¾åå¤çï¼ä»¥åå¯¼å ¥å ¶å®ä¸äºå ï¼æ¯å¦timeï¼randomåmathãå®ä»¬è½è®©æ们æ´å®¹æçæ§å¶çè±ç²åçè¿å¨è½¨è¿¹ã
Tkinteråºç¨çåºæ¬è®¾ç½®å¦ä¸ï¼
root=tk.Tk()
为äºè½åå§åTkinterï¼æä»¬å¿ é¡»å建ä¸ä¸ªTk()æ ¹é¨ä»¶ï¼rootwidgetï¼ï¼å®æ¯ä¸ä¸ªçªå£ï¼å¸¦ææ é¢æ åç±çªå£ç®¡çå¨æä¾çå ¶å®è£ 饰ç©ãè¯¥æ ¹é¨ä»¶å¿ é¡»å¨æ们åå»ºå ¶å®å°é¨ä»¶ä¹åå°±å建å®æ¯ï¼èä¸åªè½æä¸ä¸ªæ ¹é¨ä»¶ã
w=tk.Label(root,text="HelloTkinter!")
è¿ä¸è¡ä»£ç å å«äºLabelé¨ä»¶ã该Labelè°ç¨ä¸ç第ä¸ä¸ªåæ°å°±æ¯ç¶çªå£çååï¼å³æ们è¿éç¨çï¼æ ¹âãå ³é®ååæ°ï¼textâæææ¾ç¤ºçæåå 容ãä½ ä¹å¯ä»¥è°ç¨å ¶å®å°é¨ä»¶ï¼Buttonï¼Canvasççã
w.pack()
root.mainloop()
æ¥ä¸æ¥çè¿ä¸¤è¡ä»£ç å¾éè¦ãè¿éçæå æ¹æ³æ¯åè¯Tkinterè°æ´çªå£å¤§å°ä»¥éåºæç¨çå°é¨ä»¶ãçªå£ç´å°æ们è¿å ¥Tkinteräºä»¶å¾ªç¯ï¼è¢«root.mainloop()è°ç¨æ¶æä¼åºç°ãå¨æä»¬å ³éçªå£åï¼èæ¬ä¼ä¸ç´å¨åçå¨äºä»¶å¾ªç¯ã
å°çè±ç»½æ¾è½¬è¯æ代ç
ç°å¨æ们设计ä¸ä¸ªå¯¹è±¡ï¼è¡¨ç¤ºçè±äºä»¶ä¸çæ¯ä¸ªç²åãæ¯ä¸ªç²åé½ä¼æä¸äºéè¦çå±æ§ï¼æ¯é äºå®çå¤è§å移å¨ç¶åµï¼å¤§å°ï¼é¢è²ï¼ä½ç½®ï¼é度ççã
跨年çè±ä»£ç ï½ç¨Pythonéä½ ä¸åºè·¨å¹´çè±ç§å·²ç»æ¥è¿å°¾å£°äºï¼å³å°å°æ¥ï¼æ¬ææ们ç¨Pythonéä½ ä¸åºè·¨å¹´çè±ç§ã
æ们ç¨å°çPython模åå æ¬ï¼tkinterãPILãtimeãrandomãmathï¼å¦æ第ä¸æ¹æ¨¡å没æè£ çè¯ï¼pipinstallä¸ä¸å³å¯ï¼ä¸é¢çä¸ä¸ä»£ç å®ç°ã
导åº
çè±é¢è²
å®ä¹çè±ç±»
çæ¾çè±
å¯å¨
çä¸ä¸ææï¼
年跨年çè±ä»£ç å¯å¤å¶
çè±ä»£ç å¦ä¸ï¼
packagelove;
importjava.applet.Applet;
importjava.awt.Color;
importjava.awt.Graphics;
importjava.net.URL;
importjava.util.Random;
çè±
@authorenjoy
@SuppressWarnings("serial")
publicclassQextendsAppletimplementsRunnable
publicintspeed,variability,Max_Number,Max_Energy,Max_Patch,
Max_Length,G;
publicStringsound;
privateintwidth,height;
privateThreadthread=null;
privateBeaClassDemobcd[];
publicvoidinit()?
inti;
this.setSize(,);
width=getSize().width-1;
height=getSize().height-1;
speed=1;?//çè±ç»½æ¾çé度
variability=;
Max_Number=;?//å¯ååºçè±çæ大æ°ç®
Max_Energy=width+;
Max_Patch=;?//æ大çæç¹æ°
Max_Length=;?//æç¹çæ大è·ç¦»
G=;?//åå°é¢å¼¯æ²çå度
bcd=newBeaClassDemo[Max_Number];
for(i=0;iMax_Number;i++)
bcd[i]=newBeaClassDemo(width,height,G);
}
publicvoidstart(){
if(thread==null){
thread=newThread(this);
thread.start();
}
}
@SuppressWarnings("deprecation")
publicvoidstop(){
if(thread!=null){
thread.stop();
thread=null;
}
}
@SuppressWarnings({ "unused","static-access"})
publicvoidrun(){
inti;
intE=(int)(Math.random()*Max_Energy*3/4)+Max_Energy/4+1;
intP=(int)(Math.random()*Max_Patch*3/4)?//çè±çæç¹æ°
+Max_Patch/4+1;
intL=(int)(Math.random()*Max_Length*3/4)?//çè±å¯åå°åºçè·ç¦»
+Max_Length/4+1;
longS=(long)(Math.random()*);
booleansleep;
Graphicsg=getGraphics();
URLu=null;
while(true){
try{
thread.sleep(/speed);
catch(InterruptedExceptionx){
sleep=true;
for(i=0;iMax_Number;i++)
sleep=sleepbcd[i].sleep;
if(sleepMath.random()*variability){
E=(int)(Math.random()*Max_Energy*3/4)+Max_Energy/4
+1;
P=(int)(Math.random()*Max_Patch*3/4)+Max_Patch/4
+1;
L=(int)(Math.random()*Max_Length*3/4)+Max_Length/4
+1;
S=(long)(Math.random()*);
for(i=0;iMax_Number;i++){
if(bcd[i].sleepMath.random()*Max_Number*L1)
bcd[i].init(E,P,L,S);
bcd[i].start();
bcd[i].show(g);
publicvoidpaint(Graphicsg)?
g.setColor(Color.black);
g.fillRect(0,0,width+1,height+1);
classBeaClassDemo
publicbooleansleep=true;
privateintenergy,patch,length,width,height,G,Xx,Xy,Ex[],Ey[],x,
y,Red,Blue,Green,t;
privateRandomrandom;
publicBeaClassDemo(inta,intb,intg)
width=a;
height=b;
G=g;
publicvoidinit(inte,intp,intl,longseed)?
inti;
energy=e;
patch=p;
length=l;
//å建ä¸ä¸ªå¸¦ç§åçéæºæ°çæå¨
random=newRandom(seed);
Ex=newint[patch];
Ey=newint[patch];
Red=(int)(random.nextDouble()*)+;
Blue=(int)(random.nextDouble()*)+;
Green=(int)(random.nextDouble()*)+;
Xx=(int)(Math.random()*width/2)+width/4;
Xy=(int)(Math.random()*height/2)+height/4;
for(i=0;ipatch;i++){
Ex[i]=(int)(Math.random()*energy)-energy/2;
Ey[i]=(int)(Math.random()*energy*7/8)-energy/8;
publicvoidstart
t=0;
sleep=false;
publicvoidshow(Graphicsg)?
if(!sleep)
if(tlength)
inti,c;
doubles;
Colorcolor;
c=(int)(random.nextDouble()*)-+Red;
if(c=0c)
Red=c;
c=(int)(random.nextDouble()*)-+Blue;
if(c=0c)
Blue=c;
c=(int)(random.nextDouble()*)-+Green;
if(c=0c)
Green=c;
color=newColor(Red,Blue,Green);
for(i=0;ipatch;i++)
s=(double)t/;
x=(int)(Ex[i]*s);
y=(int)(Ey[i]*s-G*s*s);
g.setColor(color);
g.drawLine(Xx+x,Xy-y,Xx+x,Xy-y);
if(t=length/2)
intj;
for(j=0;j2;j++)
s=(double)((t-length/2)*2+j)/;
x=(int)(Ex[i]*s);
y=(int)(Ey[i]*s-G*s*s);
g.setColor(Color.black);
g.drawLine(Xx+x,Xy-y,Xx+x,Xy-y);
常ç¨çç¼ç¨è¯è¨ã
ç¼ç¨è¯è¨ä¸ï¼Cè¯è¨
Cè¯è¨æ¯ä¸çä¸ææµè¡ã使ç¨æ广æ³çé«çº§ç¨åºè®¾è®¡è¯è¨ä¹ä¸ãå¨æä½ç³»ç»åç³»ç»ä½¿ç¨ç¨åºä»¥åéè¦å¯¹ç¡¬ä»¶è¿è¡æä½çåºåï¼ç¨Cè¯è¨ææ¾ä¼äºå ¶å®é«çº§è¯è¨ï¼è®¸å¤å¤§ååºç¨è½¯ä»¶é½æ¯ç¨Cè¯è¨ç¼åçã
ç¼ç¨è¯è¨äº:java
Javaæ¯ä¸ç§å¯ä»¥æ°å跨平å°åºç¨è½¯ä»¶çé¢å对象çç¨åºè®¾è®¡è¯è¨ï¼æ¯ç±SunMicrosystemså ¬å¸äºå¹´5ææ¨åºçJavaç¨åºè®¾è®¡è¯è¨åJavaå¹³å°ï¼å³JavaSE,JavaEE,JavaMEï¼çæ»ç§°ã
ç¼ç¨è¯è¨ä¸:c++
C++è¿ä¸ªè¯å¨ä¸å½å¤§éçç¨åºåååä¸é常被读åâCå å âï¼è西æ¹çç¨åºåé常读åâCplusplus","CPPâãå®æ¯ä¸ç§ä½¿ç¨é常广æ³ç计ç®æºç¼ç¨è¯è¨ãC++æ¯ä¸ç§éææ°æ®ç±»åæ£æ¥çãæ¯æå¤éç¼ç¨èå¼çéç¨ç¨åºè®¾è®¡è¯è¨ã
UI交互版本李峋python爱心代码 (附源码)
李峋同款Python爱心代码UI交互版本
以下内容适合小白用户,无需复杂的Python环境配置,即可轻松操作。小游戏 node 源码
亮点包括:
1. UI交互功能,支持更换爱心的颜色
2. 可添加或更换表白对象
3. 打包成exe文件,无需安装Python环境,直接点击运行
4. 名字标签随心跳频率变化,趣味互动
以下为代码演示视频,感受李峋同款爱心代码的魅力。
注意:视频可能有轻微卡顿,原因为录屏过程中所造成,不影响代码运行效果。
代码实现包含:
1. 使用tkinter库实现UI界面,用户可选择爱心颜色
2. 交互式添加或更换表白对象
3. 通过打包成exe文件,无需Python环境,直接运行
4. 名字标签随心跳律动,增强用户互动体验
为了方便获取代码,可关注公众号“指针阿飞”,代码的源码回复“爱心”,即可免费领取源代码。
为了便于学习和拓展,推荐参考以下相关文章:
1. 李峋爱心代码
2. tkinter学习笔记-颜色选择框的调用 - 知乎 (zhihu.com)
Python+mysql+tkinter+matplotlib的可视化学生成绩管理系统课程设计(文末附源码)
开发工具使用了PyCharm专业版以及Python3.7,并结合MySQL8.0构建可视化学生成绩管理系统。
需要获取源码、咨询或定制课程设计(包括但不限于C语言数据结构及Python)的读者,可以通过以下方式联系:
访问指定链接并扫码添加QQ好友,或者直接添加QQ:。
CSDN博客中,源箱源码野指针的快乐博主提供了一系列Python、运维、KVM领域的课程设计资源,感兴趣的读者可以点击直达链接进行访问。
系统的运行效果包括以下页面:
主页面展示了整个系统的概览。
教师端功能包含:
登录后,教师可访问个人资料页面、学生查询页面、成绩查询页面以及成绩分析页面。
成绩分析页面支持显示课程成绩统计图。三四渡源码
各班级创建分析页面以图表形式展示成绩。
班级综合成绩评定页面通过扇形图进行展示。
此外,教师还可以在课程管理页面根据学院和考试方式添加或删除课程。
Teacherpage.py文件包含教师端功能的实现代码。
学生端功能则涉及登录、修改密码等操作,具体实现代码位于student.py文件中。
数据库采用MySQL8.0,系统内创建的兔八源码表和数据库结构支持成绩与科目的增删查改操作。
Dao层代码负责与数据库交互,执行SQL语句以实现数据管理功能。
PythonTkinterå¸å±ç®¡çå¨ä¹Gridå¸å±ç®¡çå¨è¯¦è§£
1.å¸å±ç®¡çå¨æ¦è¿°
æ们å¨åé¢å¨GUIç¼ç¨æ¡æ¶è®¤è¯ææ¡åå¦ä¹ å°GUIç¼ç¨å为两æ¥
第ä¸æ¥ï¼å建ç»ä»¶æ¾å ¥å°å®¹å¨
第äºæ¥ï¼ä½¿ç¨å¸å±ç®¡çå¨å¯¹å®¹å¨ç»ä»¶è¿è¡æç
GUIç¼ç¨å°±ç¸å½äºå°å©åæ积æ¨ï¼æ¯ä¸ªç§¯æ¨ååºè¯¥æ¾å¨åªéï¼æ¯ä¸ªç§¯æ¨åæ¾ç¤ºä¸ºå¤å¤§ï¼ä¹å°±æ¯å¯¹å¤§å°åä½ç½®é½éè¦è¿è¡ç®¡çï¼èå¸å±ç®¡çæ£æ¯è´è´£ç®¡çåç»ä»¶ç大å°åä½ç½®çãæ¤ä¸ºï¼å½ç¨æ·è°æ´äºçªå£ç大å°ä¹åï¼å¸å±ç®¡çå¨è¿ä¼èªå¨è°æ´çªå£ä¸åç»ä»¶ç大å°åä½ç½®ã
pythonTkinteræä¾äºè´è´£ç®¡çå个ç»ä»¶ç大å°åä½ç½®çå¸å±ç®¡çå¨
å¸å±ç®¡çå¨è½å¸®å©æ们ç»ç»ã管çå¨ç¶ç»ä»¶ä¸åç»ä»¶çå¸å±æ¹å¼
Tkinteræä¾äºä¸ç§ç®¡çå¨ï¼packãgridãplace
æ¬æï¼æ们å°å¦ä¹ PythonTkinterçå¸å±ç®¡çGridç¸å ³å±æ§åæ¹æ³ï¼Let'sgo~
2.Gridå¸å±ç®¡çå¨Gridè¡¨æ ¼å¸å±å¨ï¼éç¨è¡¨æ ¼ç»æç»ä»¶ãåç»ä»¶çä½ç½®ç±è¡ååçåå æ ¼æ¥ç¡®å®ï¼å¹¶ä¸å¯ä»¥å¯ä»¥è·¨è¡åè·¨åï¼ä»èå®ç°å¤æçå¸å±ã
Gridæç»ä»¶ç©ºé´å解æä¸ä¸ªç½æ ¼è¿è¡ç»´æ¤ï¼å³æç §è¡ãåçæ¹å¼æåç»ä»¶ï¼ç»ä»¶ä½ç½®ç±å ¶æå¨çè¡å·ååå·å³å®ï¼
è¡å·ç¸åèåå·ä¸åçå 个ç»ä»¶ä¼è¢«ä¾æ¬¡ä¸ä¸æå
åå·ç¸åèè¡å·ä¸åçå 个ç»ä»¶ä¼è¢«ä¾æ¬¡å·¦å³æå
ä¾å¦ä½¿ç¨Gridå¸å±ç®¡çå¨å¯¹ç»éçé¢è¿è¡æç示ä¾å¾ï¼
3.Grid常ç¨å±æ§å±æ§ä½ç¨columnæå®å°ç»ä»¶æ¾å ¥åªåã第ä¸åçç´¢å¼ä¸º0columnspanæå®ç»ä»¶æ¨ªè·¨å¤å°årowæå®ç»ä»¶æ¾å ¥åªè¡ã第ä¸è¡çç´¢å¼ä¸º0rowspanæå®ç»ä»¶æ¨ªè·¨å¤å°è¡stickyè¿ä¸ªåæ°ç¨æ¥ç¡®å®ï¼å¨æ件æ£å¸¸å°ºå¯¸ä¸ï¼å¦ä½åé åå ä¸å¤ä½ç空é´ipadxxæ¹åçå é¨å¡«å ï¼å¨æ件å é¨ï¼å·¦å³æ¹ååå¡«å æå®é¿åº¦ç空é´ipadyyæ¹åçå é¨å¡«å ï¼å¨æ件å é¨ï¼ä¸ä¸æ¹ååå¡«å æå®é¿åº¦ç空é´padxxæ¹åçå¤é¨å¡«å ï¼å¨æ件å¤é¨ï¼å·¦å³æ¹ååå¡«å æå®é¿åº¦ç空é´padyyæ¹åçå é¨å¡«å ï¼å¨æ件å é¨ï¼ä¸ä¸æ¹ååå¡«å æå®é¿åº¦ç空é´in_ç¨in_=w2å¯ä»¥å°wç»è®°ä¸ºW2çchildæ件ï¼W2å¿ é¡»æ¯Wå建æ¶æå®parentæ件çChildæ件 éè¦è¯´æï¼stickyå±æ§
å¦æ没æ声æstickyå±æ§ï¼é»è®¤å°æä»¶å± ä¸äºåå ä¸
éè¿è®¾ç½®sticky=tk.NE(é å³ä¸æ¹)ï¼sticky=tk.SE(é å³ä¸æ¹)ï¼sticky=tk.SW(é å·¦ä¸æ¹)ï¼sticky=tk.NW(é å·¦ä¸æ¹)ï¼å¯ä»¥å°æ件å¸ç½®å¨åå çæ个è§è½ã
éè¿è®¾ç½®sticky=tk.N(é ä¸æ¹)ï¼sticky=tk.E(é å³æ¹)ï¼sticky=tk.S(é ä¸æ¹)ï¼sticky=tk.W(é å·¦æ¹)ï¼å¯ä»¥å°æ件å¸ç½®å¨åå çæ个æ¹åä¸
éè¿è®¾ç½®sticky=tk.N+tk.S,å¨åç´æ¹åä¸å»¶ä¼¸æ件ï¼å¹¶ä¿ææ°´å¹³å± ä¸
éè¿è®¾ç½®sticky=tk.E+tk.W,å¨æ°´å¹³æ¹åä¸å»¶ä¼¸æ件ï¼å¹¶ä¿æåç´å± ä¸
éè¿è®¾ç½®sticky=tk.N+tk.E+tk.W,å¨æ°´å¹³ååç´æ¹åä¸å»¶ä¼¸æ件ï¼å¡«æ»¡åå
ä¸è¦å¨ä¸ä¸ªä¸»çªå£ä¸æ··å使ç¨packågrid
4.å°è¯çåGridå¸å±ç®¡çå¨ç»ä¹ ææå¦ä¸ï¼
é¦å æ们å¯ä»¥ä½¿ç¨Packå¸å±ç®¡çå¨ç®¡ç两个ç»ä»¶Entryï¼è¾å ¥æ¡ï¼åFrameï¼å®¹å¨ï¼
self.En=Entry(relief=SUNKEN,font=('CourierNew',),width=)self.En.pack(side=TOP,pady=)p=Frame(self.master)p.pack(side=TOP)Frameï¼å®¹å¨ï¼éé¢åæ¾è®¡ç®å¨?æé®ï¼æé®æ¯ç±åè¡ååç»æçç½æ ¼
Bu=Button(p,text=names[i],font=("Verdana",),width=6)使ç¨å¾ªç¯æ¥çæ计ç®å¨ä¸ªæé®ï¼å¹¶ä¸ä½¿ç¨Gridæ¥å¯¹å®ä»¬è¿è¡æç
foriinrange(len(names)):Bu=Button(p,text=names[i],font=("Verdana",),width=6)Bu.grid(row=i//4,column=i%4)使ç¨GUIé¢å对象ç¼ç¨åæ³ï¼ä½¿ç¨Application(Frame)æ¥å建å®ä¾å¯¹è±¡ï¼å建ç»ä»¶çæ¹æ³å°è£ ç»createWidget()æ¹æ³ï¼éè¿æé å½æ°å建好ç»ä»¶
å®æ´ä»£ç å¦ä¸ï¼
fromtkinterimport*importtkinterclassApplication(Frame):def__init__(self,master=None):super().__init__(master)self.master=masterself.Createwidget()defCreatewidget(self):self.En=Entry(relief=SUNKEN,font=('CourierNew',),width=)self.En.pack(side=TOP,pady=)p=Frame(self.master)p.pack(side=TOP)names=("0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","=")foriinrange(len(names)):Bu=Button(p,text=names[i],font=("Verdana",),width=6)Bu.grid(row=i//4,column=i%4)root=Tk()root.title("MyfirstApp")app=Application(master=root)root.mainloop()æ»ç»æ¬æï¼æ们å¦ä¹ PythonTkinteræä¾ç½æ ¼å¸å±ç®¡çå¨Grid
Grid对ç»ä»¶è¿è¡ç½æ ¼å¼æ°´å¹³ååç´è¿è¡æçï¼æ¹ä¾¿æ们æ´å¥½å°ä½¿ç¨
以ä¸æ¯æ¬æå 容ï¼æ¬¢è¿å¤§ä½¬ä»¬ç¹èµè¯è®ºææ£ï¼ä¸æ¬¡è§~?(`)æ¯å¿?
æ¨èé 读PythonTkinterå¸å±ç®¡çå¨ä¹Placeå¸å±ç®¡çå¨è¯¦è§£PythonTkinterå¸å±ç®¡çå¨ä¹Packå¸å±ç®¡çå¨è¯¦è§£ä½è ï¼çååçå°å¯ç±PythonTkinterç»ä»¶ä¹Canvas
åè¨
大家å°æ¶åé½ç©è¿æ¶é¸¦å§ï¼ä¸ç®¡å¨åªéï¼åªææç»çº¸å彩ç¬ï¼ç»å¸ä¸å°±è½åºç°æ³è±¡å丰å¯çå¾æ¡ã
ä¸å¦æ¶ï¼æ们é¢å¯¹é¾é¢ï¼å¤§å®¶é½å欢å¨ç»çº¸ä¸æèªå·±çæè·¯ç»åºæ¥
å¦ä»ï¼å·¥ä½ä¸ä¸ç®¡æ¯ä¸ªäººè¿æ¯å¢éï¼å¨ç»å¾è½¯ä»¶ç»æ维导å¾ã项ç®æ¡ççï¼å¾å½¢åæ´å ç´è§
ç»å¾å·¥å ·å¨æ们æ¥å¸¸çæ´»ä¸éå¤å¯è§ï¼æ们æ常è§çæWindowsç³»ç»-ç»å¾ï¼MACç³»ç»çå¤å¿å½ï¼é£ä¹æ们æ¥çä¸ä¸ï¼ç»å¾å·¥å ·çæé å§
æ é¢ãæ¯ä¸æ æè¿°è¯åå½¢ç¶çé½æ¯Labelæ ç¾ç»ä»¶
空ç½é¢ç§¯æ大çæ¯Canvasç»å¸ç»ä»¶
æ¥ç->æ¾ç¤ºç¶ææ¯CheckbuttonFå¤éæ¡ç»ä»¶
æåæ们è¦éåºæè å°åæ¾å¤§çªå£æé®æ¯Buttonç»ä»¶
æ们å¯ä»¥çå°ï¼å¨ç»å¾å·¥å ·ä¸ä¸»è¦çä½ç¨å°±æ¯å¨é£ç©ºç½çä½ç½®æ·»å å¾çãç»å¾ç
æ¬æï¼æ们å¼å§å¦ä¹ PythonTkinteræ åç»ä»¶Canvasç»å¸ç¸å ³å±æ§åæ¹æ³ï¼Let'sgo~
1.Canvasæ¦è¿°Canvasï¼ç»å¸ï¼æ¯PythonTkinteræ åç»ä»¶ï¼å¯æ¾ç½®å¾å½¢ãå¾ç¸ãç»ä»¶çåè½
Canvasç¹ç¹
Canvasç»å¸æ¯ä¸ä¸ªç©å½¢åºåç¨æ¥ç»å¶
Canvasç»å¸å¯ä»¥æ·»å 线æ§ãåå½¢ãå¾ç
Canvasç»å¸æ¯ææ·»å çç»ä»¶ä½ç½®ãå¤è§
Canvasç»å¸ä¹æä¾ButtonãLabelå ¶ä»ç»ä»¶
Canvasè¯æ³æ ¼å¼
Ca=Canvas(mater,options)2.Canvasç¸å ³å±æ§å±æ§å«ä¹anchoræå®ç»å¶æåãGUIç»ä»¶çä½ç½®ã该éé¡¹ä» å¯¹create_text()ãcreate_window()æ¹æ³ææjoinstyleæå®ç´æ¥è¿æ¥ç¹çé£æ ¼ãä» å¯¹ç»å¶ç´çº¿åå¤åå½¢ææã该é项æ¯æMETTERãROUNDãBEVELé项å¼ãjustifyæå®æåç对é½æ¹å¼ã该é项æ¯æCENTERãLEFTãRIGHT常éå¼ï¼è¯¥éé¡¹ä» å¯¹create_textæ¹æ³ææãarrowshapeæå®ç®å¤´å½¢ç¶ã该é项æ¯ä¸ä¸ªå½¢å¦""çå符串ï¼å符串ä¸çä¸ä¸ªæ´æ°ä¾æ¬¡æå®å¡«å é¿åº¦ãç®å¤´é¿åº¦ãç®å¤´å®½åº¦ãarrowæå®ç»å¶ç´çº¿æ¶ä¸¤ç«¯æ¯å¦æç®å¤´ã该é项æ¯æNONEï¼ä¸¤ç«¯æ ç®å¤´ï¼ãFIRSTï¼å¼å§ç«¯æç®å¤´ï¼ãLASTï¼ç»æ端æç®å¤´ï¼ãBOTHï¼ä¸¤ç«¯é½æç®å¤´ï¼é项å¼ãextentæå®ç»å¶å¼§çè§åº¦ã该éé¡¹ä» å¯¹create_arcæ¹æ³èµ·ä½ç¨ãstartæå®ç»å¶å¼§çèµ·å§è§åº¦ã该éé¡¹ä» å¯¹create_arcæ¹æ³èµ·ä½ç¨ãstyleæå®ç»å¶å¼§çæ ·å¼ã该éé¡¹ä» å¯¹create_arcæ¹æ³èµ·ä½ç¨ã该é项æ¯æPIESLICEï¼æå½¢ï¼ãCHORDï¼å¼å½¢ï¼ãARCï¼ä» ç»å¶å¼§ï¼é项å¼ãstipple使ç¨ä½å¾å¹³éºè¿è¡å¡«å ã该é项å¯ä¸fillé项ç»å使ç¨ï¼fillé项ç¨äºæå®ä½å¾çé¢è²ãdashæå®è¾¹æ¡ä½¿ç¨è线ã该å±æ§å¼æ¢å¯ä¸ºåç¬çæ´æ°ï¼ç¨äºæå®è线ä¸çº¿æ®µçé¿åº¦ï¼ä¹å¯ä¸ºå½¢å¦ï¼5,2,3ï¼æ ¼å¼çå ç´ ï¼æ¤æ¶5æå®è线ä¸çº¿æ®µçé¿åº¦ï¼2æå®é´éé¿åº¦ï¼3æå®è线é¿åº¦â¦â¦ä¾æ¤ç±»æ¨ãwidthæå®è¾¹æ¡å®½åº¦ãå¦æä¸æå®è¯¥é项ï¼è¾¹æ¡å®½åº¦é»è®¤ä¸º1outlineæå®è¾¹æ¡é¢è²ãfillæå®å¡«å é¢è²ãå¦æä¸æå®è¯¥é项ï¼é»è®¤ä¸å¡«å ã3.Canvas常ç¨æ¹æ³Canvasç»å¸æä¾ç»å¶å¾å½¢æ¹æ³
æ¹æ³ä½ç¨create_rectangle()ç»å¶ç©å½¢create_oval()ç»å¶æ¤åï¼å æ¬åï¼åæ¯æ¤åçç¹ä¾ï¼create_arcç»å¶å¼§create_bitmapç»å¶ä½å¾create_imageç»å¶å¾çcreate_line()ç»å¶ç´çº¿create_polygonç»å¶å¤è¾¹å½¢create_textç»å¶æåcreate_windowç»å¶ç»ä»¶Canvasç»å¸æä¾æä½å¾å½¢æ ç¾æ¹æ³
æ¹æ³ä½ç¨addtag_aboove()为tagOrId对åºå¾å½¢é¡¹çä¸ä¸ä¸ªå¾å½¢é¡¹æ·»å æ°tagaddtag_all()为ææå¾å½¢é¡¹æ·»å æ°tagaddtag_below()为tagOrId对åºå¾å½¢é¡¹çä¸ä¸ä¸ªå¾å½¢é¡¹æ·»å æ°tagaddtag_closest()为åxãyç¹ææ¥è¿çå¾å½¢é¡¹æ·»å æ°tagaddtag_enclosed()为æå®ç©å½¢åºåå æä¸é¢çå¾å½¢é¡¹æ·»å æ°tagdtag()å é¤æå®å¾å½¢é¡¹çtaggettags()è·åæå®å¾å½¢çææTagfind_withtag()è·åtagOrId对åºçææå¾å½¢é¡¹find_above()è¿åtagOrId对åºå¾å½¢é¡¹çä¸ä¸ä¸ªå¾å½¢é¡¹find_all()è¿åå ¨é¨å¾å½¢é¡¹find_below()è¿åtagOrId对åºå¾å½¢é¡¹çä¸ä¸ä¸ªå¾å½¢é¡¹find_closest()è¿ååxãyç¹ææ¥è¿çå¾å½¢é¡¹find_enclosed()è¿åä½äºæå®ç©å½¢åºåå æä¸é¢çå¾å½¢é¡¹find_overlapping()è¿åä¸æå®ç©å½¢åºåéå çæä¸é¢çå¾å½¢é¡¹find_withtag()è¿åtagOrId对åºçå ¨é¨å¾å½¢é¡¹Canvasç»å¸æä¾æä½å¾å½¢æ¹æ³
æ¹æ³ä½ç¨coords()é设å¾å½¢é¡¹ç大å°åä½ç½®itemconfig()为tagOrId对åºå¾å½¢é¡¹é ç½®é项move()移å¨ç»å¸ä¸ç»ä»¶delete()å é¤ç»å¸ä¸ç»ä»¶scale()缩æ¾å¾å½¢é¡¹dchars()å é¤æåå¾å½¢é¡¹ä¸é´çé¨åæå éè¦è¯´æï¼Canvaså ç´ åæ æ¯ç»å¾çåºç¡
ç¹(0,0)ä½äºCanvasç»ä»¶çå·¦ä¸è§
Xè½´æ°´å¹³åå³å»¶ä¼¸
Yè½´åç´åä¸å»¶ä¼¸
4.å°è¯çåCanvasç»ä»¶å®æç»ä¹ ææå¦ä¸ï¼
å建Canvasç»ä»¶
self.Ca=Canvas(self,width=,height=)self.Ca.pack()Canvasç»ä»¶æä¾create_polygonå建å¤è¾¹å½¢å¾å½¢
åæ ï¼x1,y1,x2,y2,x3,y3ï¼å¯ä»¥ä½¿ç¨random.randint()æ¥çæ
å¯ä»¥å¤è¾¹ç»å¶ä¸è§å½¢
defdraw_pol(self):self.Ca.create_polygon((1*x1,y1*,x2*1,y2*,x3*,y3*),fill=rcolor)Canvasç»ä»¶æä¾create_line()æ¥ç»å¶ç´çº¿
åæ ï¼x1,y1,x2,y2ï¼å¯ä»¥ä½¿ç¨random.randint()æ¥çæ
defdraw_line(self):self.Ca.create_line(x1,y1,x2,y2,fill=rcolor)Canvasç»ä»¶æä¾create_oval()æ¥ç»å¶æ¤åå½¢
åæ ï¼x1,y1,x2,y2ï¼å¯ä»¥ä½¿ç¨random.randint()æ¥çæ
æ¤ååæ ä¹é´æ¯æä¸å®å ³ç³»ç
defdraw_oval(self):self.Ca.create_oval(x1,y1/2,x2*4,y2*4,fill=rcolor)Canvasç»ä»¶æä¾create_rectangle()æ¥ç»å¶ç©å½¢
åæ ï¼x1,y1,x2,y2ï¼å¯ä»¥ä½¿ç¨random.randint()æ¥çæ
å¯ä»¥ä½¿ç¨å±æ§æ¥è®¾ç½®ç©å½¢çå¤è§ï¼æ¯å¦dashå±æ§ç©å½¢çº¿æ¡æ¯è线
defdraw_rect(self):self.Ca.create_rectangle(x1,y1,x2,y2,fill=rcolor,dash=(4,4))Canvasç»ä»¶æä¾create_image()æ¥æ·»å å¾ç
åæ ï¼x1,y1ï¼å¯ä»¥ä½¿ç¨random.randint()æ¥çæ
è¦è®¾ç½®å ¨å±è¾¹Photoå¦åå¾çæ æ³æ¾ç¤º
defdraw_image(self):x1=random.randint(1,)y1=random.randint(1,)globalPhotoPhoto=PhotoImage(file="heart.gif")self.Ca.create_image(x1,y1,image=Photo)Canvasç»ä»¶å¯ä»¥æ¯æç»å®é¼ æ äºä»¶ï¼ä½¿ç¨é¼ æ è¿è¡ç»å¶ä»»æå¾å½¢
self.Ca.bind("<B1-Motion>",self.paint)以ä¸å¾å½¢ç»å¶çé¢è²æ¯éæºäº§çç
defrandomcolor(self):colorlist=["1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]color=""foriinrange(6):color+=colorlist[random.randint(0,)]return'#'+coloré¢è²ä»£ç æ¯ä»¥â#âå¼å¤´ç6ä½è¿å¶ä»£ç
使ç¨for循ç¯è¿è¡random.randint()æ¥éæºäº§çæ¯ä¸ä½ç代ç
å®æ´ä»£ç å¦ä¸ï¼
fromtkinterimport*importrandomimporttkinterclassApplication(Frame):def__init__(self,master=None):#super()代表çæ¯ç¶ç±»çå®ä¹ï¼èä¸æ¯ç¶ç±»å¯¹è±¡super().__init__(master)self.master=masterself.pack()self.createWidgetCanvas()defcreateWidgetCanvas(self):self.Ca=Canvas(self,width=,height=)self.Ca.pack()self.Ca.bind("<B1-Motion>",self.paint)Button(self,text="æ¸ ç©ºç»å¸",width=,command=(lambdax="all":self.Ca.delete(x))).pack(side="left")Button(self,text="ç»ä¸è§å½¢",width=,command=self.draw_pol).pack(side="left")Button(self,text="ç»æ¤å",width=,command=self.draw_oval).pack(side="left")Button(self,text="ç»ç´çº¿",width=,command=self.draw_line).pack(side="left")Button(self,text="ç»ç©å½¢",width=,command=self.draw_rect).pack(side="left")Button(self,text="æ·»å å¾ç",width=,command=self.draw_image).pack(side="left")defdraw_line(self):x1=random.randint(0,)y1=random.randint(0,)x2=random.randint(0,)y2=random.randint(0,)rcolor=self.randomcolor()self.Ca.create_line(x1,y1,x2,y2,fill=rcolor)defdraw_oval(self):x1=random.randint(0,)y1=random.randint(0,)x2=random.randint(0,)y2=random.randint(0,)rcolor=self.randomcolor()self.Ca.create_oval(x1,y1/2,x2*4,y2*4,fill=rcolor)defdraw_rect(self):x1=random.randint(5,)y1=random.randint(5,)x2=random.randint(5,)y2=random.randint(5,)rcolor=self.randomcolor()self.Ca.create_rectangle(x1,y1,x2,y2,fill=rcolor,dash=(4,4))defdraw_pol(self):x1=random.randint(1,)y1=random.randint(1,)x2=random.randint(1,)y2=random.randint(1,)x3=random.randint(1,)y3=random.randint(1,)rcolor=self.randomcolor()self.Ca.create_polygon((1*x1,y1*,x2*1,y2*,x3*,y3*),fill=rcolor)defdraw_image(self):x1=random.randint(1,)y1=random.randint(1,)globalPhotoPhoto=PhotoImage(file="heart.gif")self.Ca.create_image(x1,y1,image=Photo)defpaint(self,event):x1,y1=(event.x-1),(event.y-1)x2,y2=(event.x+1),(event.y+1)self.Ca.create_oval(x1,y1,x2,y2,fill="pink")defrandomcolor(self):colorlist=["1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]color=""foriinrange(6):color+=colorlist[random.randint(0,)]return'#'+colorroot=Tk()root.geometry("x++")root.title("MyfirstAPP")app=Application(master=root)root.mainloop()æ»ç»æ¬æï¼æ们å¦ä¹ PythonTkinteræä¾ä¸ä¸ªé常强大好ç©çCanvasç»ä»¶ãæ们使ç¨Canvasç»ä»¶å¯ä»¥ç²¾ç¾çå¾å½¢ï¼å¢å æ们ç¨åºç趣å³æ§ã
以ä¸æ¯æ¬æå 容ï¼æ¬¢è¿å¤§ä½¬ä»¬ç¹èµè¯è®ºææ£ï¼ä¸æ¬¡è§~?(`)æ¯å¿?
ä½è ï¼çååçå°å¯ç±用python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用
用Python制作简单视频播放器,学习tkinter、cv2、PIL基础应用
一、程序要求
通过Python创建视频播放软件,使用tkinter设计窗口界面。
二、播放窗口
1. 导入tkinter模块并使用,创建主窗口。
2. 设置窗口标题,显示在窗口左上角。
3. 使用Label创建标签,显示在窗口上。
三、加载并播放视频
1. 加载指定视频文件,确保文件与程序同目录或提供完整路径。
2. 编写自定义函数`update_frame`用于播放视频。
3. 读取视频下一帧,返回数据。
4. 将BGR格式转换为tkinter可识别的RGB格式。
5. 显示,实现视频播放效果。
四、源代码概览
本篇内容概述了制作视频播放器的全过程,包括tkinter、cv2、PIL模块的基本应用,适合初学者尝试实践。代码示例在本部分未列出,建议动手实践以深入理解。
本文结束。如有疑问,欢迎直接留言,我们将尽速回复。感谢阅读!
PythonTkinterå¸å±ç®¡çå¨ä¹Packå¸å±ç®¡çå¨è¯¦è§£
å¤ä¹ å顾
PythonTkinterä¸ä» æä¾å¤æ ·çç»ä»¶ï¼è¿æä¾ç®¡çç»ä»¶çå¸å±ç®¡çå¨ï¼ä¸»è¦æä¸ç§å¦ä¸ï¼
æ¬ææ们å°å¦ä¹ å¦å¤ä¸ç§ä½¿ç¨æ´å ç®åçå¸å±ç®¡çå¨Packï¼ç¸å ³å±æ§å使ç¨æ¹æ³çå¦ä¹
ææåæï¼æèµ·ç²¾ç¥ï¼å¼å¯æ们ä»å¤©çå¦ä¹ ï¼Let'sgo~1.Packå¸å±ç®¡çå¨æ¦è¿°Packå¸å±ç®¡çå¨æ¯Tkinteræä¾ç管çä¸ä¸ªä¸»çªå£çç»ä»¶å¸å±çæ¹æ³ï¼å¯å建浮å¨ï¼èªå¨ä¼¸ç¼©æ©å±å¨å°éç»ä»¶çæåä¸ä½¿ç¨Packå¸å±ç®¡çå¨ä¼æ´å ç®åæ¹ä¾¿ã
Packå¸å±ç®¡çå¨ç¹ç¹
Packæç §ç»ä»¶çå建顺åºå°åç»ä»¶æ·»å å°ç¶ç»ä»¶ä¸ï¼æç §åç´æè æ°´å¹³æ¹åèªç¶æå¸ã
Packå¦æä¸æå®ä»»ä½é项ï¼é»è®¤å¨ç¶ç»ä»¶ä¸èªé¡¶åä¸æ·»å ç»ä»¶
Packæ¯ä»£ç éæå°ï¼å¯ä»¥ç¨äºå¿«éçæçé¢
Packå¸å±ç®¡çå¨éåçåºæ¯
å°å°åç»ä»¶æ¾å ¥çªå£ä¸ï¼å¹¶ä½¿å ¶å 满è¿ä¸ªçªå£
å°å°åç»ä»¶æ¾å¨é¡¶é¨
并ææ¾ç½®å¤ä¸ªç»ä»¶
åªéåç®åçåç´æè æ°´å¹³æå
2.Pack常ç¨å±æ§å±æ§ä½ç¨sideæå®åé æ¹åï¼å¯éå¼ï¼left,top,right,bottomfillæå®å¡«å é¢è²ï¼å¯éå¼ï¼x(æ°´å¹³æ¹åå¡«å )ï¼y(ç«ç´æ¹åå¡«å )ï¼bothï¼æ°´å¹³åç«ç´æ¹åå¡«å ï¼ï¼noneï¼ä¸å¡«å expandæ¯å¦å¯å±ç©ºé´ï¼å¯éå¼True/Falseanchoréå®ä½ï¼æå®ç»ä»¶çä½ç½®ï¼å¯éå¼ï¼N(å/ä¸)ï¼E(ä¸/å³)ï¼S(å/ä¸)ï¼W(西/å·¦)ï¼CENTER(ä¸é´)padxxæ¹åçå¤è¾¹è·padyyæ¹åçå¤è¾¹è·iPadxxæ¹åçå è¾¹è·ipadyyæ¹åçå è¾¹è· éè¦è¯´æï¼sideæ¯packæ¹æ³æ常ç¨å±æ§ï¼side为TOPæ¶ç¤ºä¾å¾å¦ä¸æ示
side为LEFTæ¶ç¤ºä¾å¾å¦ä¸æ示
ç»ä»¶ç¬å 空é´
ç»ä»¶æå¨çä½ç½®ï¼ä¼æ ¹æ®ä½ç½®æ¥å æ®ä¸»çªå£å¯ç¨ç©ºé´çæ´è¡æè æ´å空é´
side=TOP/BOTTOM
ï¼1ï¼ç»ä»¶ä¼å æ®æ´è¡
ï¼2ï¼åç»ç»ä»¶åªè½ä¾æ¬¡æå¨å ¶ä¸é¢æè ä¸é¢
ï¼3ï¼ç»ä»¶ä¸ºä¸ä¸æåæ¹å¼
side=LEFT/RIGHT
ï¼1ï¼ç»ä»¶ä¼å æ®æ´å
ï¼2ï¼åç»ç»ä»¶åªè½ä¾æ¬¡æå ¶å·¦è¾¹æè å³è¾¹
ï¼3ï¼ç»ä»¶ä¸ºå·¦å³æåæ¹å¼
3.å°è¯çåPackå¸å±ç®¡çå¨ç»ä¹ ææå¦ä¸ï¼
å¦ä¸ææå¾æ示ï¼æ两个Fream容å¨ç»æï¼åå«å建两个容å¨f1,f2,åå«åç´æå
f1=Frame(self)f1.pack()f2=Frame(self)f2.pack()Frame1容å¨é横åæäºäºä¸ªæé®
btlist=("popular","chinese","Japanse","Hiap","soft")fortxtinbtlist:Button(f1,text=txt).pack(side=LEFT,padx="")äºä¸ªæé®åå¨å表é
使ç¨for循ç¯åå«å建5个Button对象
Button对象主çªå£ä½¿ç¨f1
Fream2容å¨è£ é»ç½ç¸é´çLabelç»ä»¶
btlist=("popular","chinese","Japanse","Hiap","soft")fortxtinbtlist:Button(f1,text=txt).pack(side=LEFT,padx="")Label主主çªå£ä¸ºf2
使ç¨for循ç¯å建个Label对象
Labelèæ¯é¢è²ä½¿ç¨ifelseè¯å¥æ¥æ§å¶
使ç¨GUIé¢å对象ç¼ç¨åæ³ï¼ä½¿ç¨Application(Frame)æ¥å建å®ä¾å¯¹è±¡ï¼å建ç»ä»¶çæ¹æ³å°è£ ç»createWidgetPack()æ¹æ³ï¼éè¿æé å½æ°å建好ç»ä»¶
å®æ´ä»£ç å¦ä¸ï¼
fromtkinterimport*importrandomclassApplication(Frame):def__init__(self,master=None):#super()代表çæ¯ç¶ç±»çå®ä¹ï¼èä¸æ¯ç¶ç±»å¯¹è±¡super().__init__(master)self.master=masterself.pack()self.CreateWidgetpack()defCreateWidgetpack(self):f1=Frame(self)f1.pack()f2=Frame(self)f2.pack()btlist=("popular","chinese","Japanse","Hiap","soft")fortxtinbtlist:Button(f1,text=txt).pack(side=LEFT,padx="")foriinrange(1,):Label(f2,width=5,height=,borderwidth=1,relief="solid",bg="black"ifi%2==0else"white").pack(side="left",padx=2)root=Tk()root.title("MyfirstAPP")app=Application(master=root)root.mainloop()æ»ç»æ¬æï¼æ们å¦ä¹ PythonTkinterå¸å±ç®¡çå¨Pack
Packå¸å±ç®¡çå¨å¯¹äºç®åå°ç»ä»¶è½å¿«éå®ç°æå¸ææã
以ä¸æ¯æ¬æå 容ï¼æ¬¢è¿å¤§ä½¬ä»¬ç¹èµè¯è®ºææ£ï¼ä¸æ¬¡è§~?(`)æ¯å¿?
æ¨èé 读PythonTkinterå¸å±ç®¡çå¨ä¹Gridå¸å±ç®¡çå¨è¯¦è§£
PythonTkinterå¸å±ç®¡çå¨ä¹Placeå¸å±ç®¡çå¨è¯¦è§£
ä½è ï¼çååçå°å¯ç±