# 测试文件对话框,获取文件内容 # coding=utf-8 from tkinter import * from tkinter.filedialog import * root = Tk() root.geometry('400x100') def fileGet(): with askopenfile(title='上传文件', initialdir='d:', filetypes=[('文本文件', '*.txt')]) as f: show['text']=f.read() Button(root, text='选择读取的文本文件', command=fileGet).pack() show = Label(root, width=40, height=3, bg='gray') show.pack() root.mainloop()
运行结果:
读取的文件 a.txt 被我设置为了 UTF-8 格式,pycharm 里面的 Encoding 设置如下图所示:
a.txt
问题:
报错的原因是 GBK 编码解码器无法解码非法字符,我百度了相关解决办法,还是没有解决,麻烦老师帮忙看一下,代码和 a.txt 都已上传。谢谢老师!
老师,绿色箭头表示什么东西?怎么视频中没有看到有绿色虚线箭头
为什么之前可以的Label().pack(),在这个程序里面需要分成两行?
Button(name='earsor')中的name是做什么的
import pygame SCREEN_WIDTH=700 SCREEN_HEIGHT=500 BG_COLOR=pygame.Color(50,50,50) TEXT_COLOR=pygame.Color(250,0,0) class MainGame(): window=None #初始化方法 def __init__(self): pass #开始游戏 def startGame(self): #初始化窗口 pygame.display.init() #设置窗口大小 MainGame.window=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) #设置窗口的标题 pygame.display.set_caption('坦克大战1.03') while True: #给窗口设置填充色 MainGame.window.fill(BG_COLOR) #添加文字信息提示 textSurface=self.getTextSurface("地方坦克剩余数量%d"%5) #主窗口显示文字信息 MainGame.window.blit(textSurface,(5,5)) self.getEvent() pygame.display.update() #结束游戏 def endGame(self): print("谢谢使用,欢迎下次使用") exit() #添加文字信息提示 def getTextSurface(self,text): #初始化字体模块 pygame.font.init() #获取所有字体 #print(pygame.font.get_fonts()) #获取字体对象 font=pygame.font.SysFont("kaiti",18) #绘制文字信息 textSurface=font.render(text,True,TEXT_COLOR) return textSurface #添加事件监听 def getEvent(self): #获取所有事件 eventlist=pygame.event.get() #遍历事件 for event in eventlist: #判断按下是否关闭 if event.type==pygame.QUIT: self.endGame() #判断是否是键盘事件 if event.type==pygame.KEYDOWN: #判断按下的是上 下 左 右 if event.key==pygame.K_LEFT: print("按下左键,坦克向左移动") elif event.key==pygame.K_RIGHT: print("按下右键,坦克向右移动") elif event.key==pygame.K_UP: print("按下上键,坦克向上移动") elif event.key==pygame.K_DOWN: print("按下下键,坦克向下移动") class Tank(): def __init__(self): pass #展示坦克的方法 def displayTank(self): pass #移动坦克 def move(self): pass #射击 def shot(self): pass #我方坦克 class MyTank(Tank): #初始化方法 def __init__(self): pass #敌方坦克 class EnemyTank(Tank): def __init__(self): pass #子弹类 class Bullet(): def __init__(self): pass #展示子弹 def displayBullet(self): pass #移动 def move(self): pass #墙壁类 class wall(): def __init__(self): pass #展示墙壁类 def displayWall(self): pass #爆炸音效类 class Explode(): def __init__(self): pass #展示爆炸效果 def displayExplode(self): pass #音效类 class Music(): def __init__(self): pass #播放音乐 def playMusic(self): pass if __name__=="__main__": MainGame().startGame()
老师,红色方框的那橫杠可以选择不显示吗?还有就是分割线可以指定起始点不?
老师GUI编程需要学到什么程度,这个会影响到后续的学习吗
老师,我查阅了一下pygame文档后找到pygame.key.set_repeat这个语句,可以直接实现按键的按下重复执行,抬起停止执行,但是在按下第一下方向键时,无法马上重复执行move(),只能调转方向,这是为什么呢?
if event.type == pygame.KEYDOWN: #按下按键保持重复执行 pygame.key.set_repeat(50) #具体按下向左 if event.key == pygame.K_LEFT: print("坦克向左掉头,移动") MainGame.TANK_P1.move() MainGame.TANK_P1.direction = "L" elif event.key == pygame.K_RIGHT: print("坦克向右掉头,移动") MainGame.TANK_P1.direction = "R" MainGame.TANK_P1.move() elif event.key == pygame.K_UP: print("坦克向上掉头,移动") MainGame.TANK_P1.direction = "U" MainGame.TANK_P1.move() elif event.key == pygame.K_DOWN: print("坦克向下掉头,移动") MainGame.TANK_P1.direction = "D" MainGame.TANK_P1.move()
老师,我这没有显示线程,是怎么回事啊
老师您好,麻烦问下,print(os.path.dirname("a.txt")) 这句怎么没有输出结果,控制台输出了一行空行?
老师,使用面向对象的方法实现的话,只能是这样吗?我自己觉着要是像课件里讲的调用两个Frame,只能是定义两个类。求解惑!!!
"""测试pack布局管理器""" from tkinter import * class Application(Frame): def __init__(self, master=None): super().__init__(master) # super()代表的是父类的定义,而不是父类对象 self.master = master self.pack() # 调用布局管理器 self.create_widget() def create_widget(self): btnText = ("流行风", "中国风", "日本风", "重金属", "轻音乐") for txt in btnText: Button(self, text=txt).pack(side="left", padx="10") class Application2(Frame): def __init__(self, master=None): super().__init__(master) # super()代表的是父类的定义,而不是父类对象 self.master = master self.pack() # 调用布局管理器 self.create_widget() def create_widget(self): for i in range(1, 15): Button(self, width=5, height=10, bg="black" if i % 2 == 0 else "white").pack(side="left") if __name__ == "__main__": root = Tk() # 创建根窗口对象 root.geometry("700x200+200+300") app = Application(master=root) app2 = Application2(master=root) root.mainloop() # 调用组件的mainloop(),进入时间循环
tkinter * tkinter messagebox Application(Frame): (master=): ().(master) .master = master .pack() .createWidget() (): .v = StringVar(); .v.set() .r1 = Radiobutton(===.v) .r2 = Radiobutton(===.v) .r1.pack(=); .r2.pack(=) Button(==.confirm).pack(=) (): messagebox.showinfo(+.v.get()) __name__== : root = Tk() root.geometry() app = Application(=root) root.mainloop()
不太懂1为什么只读标题而已。
2为什么只读内容,不包含标题,a_csv不是包含标题吗
这块儿的master=root 是使用默认值法在传递参数么?这和函数中的不一样吧?
这块有点不懂、为什么是master=root, 这里直接传进去root不行么?
為什麼寫好後Button鍵按下去沒有反應的?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637