会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132654个问题
Python 全系列/第二阶段:Python 深入与提高/文件处理 1382楼

#测试Lable
from tkinter import *

# 表示GUI运行程序,继承父类Frame(放置其余组件的容器)
class Application(Frame):

    def __init__(self,master=None):  # 定义构造函数,构造器定义组件对象,实现组件调用。master=None初始化为空传入
        super().__init__(master)  # super()代表父类的定义,非对象,通过super()调用父类的构造方法并传入master
        self.master = master
        self.pack()               # self是组件,需要调用布局管理器,排布和显示
        self.createWidget()  # 在构造器中调用另外创建的组件

    def createWidget(self):  # 组件还需要另外创建,在createWidget单独定义,之后在构造器中调用
        self.l0 = Label(self,text="hello!百战",width=10,height=2,font=("楷体",30),fg="black",bg="white")
        self.l0.pack()

        #显示图像
        global p   #局部变量执行后会被销毁,无法显示图像,所以需要声明为全局变量
        p=PhotoImage(file='imgs/13.gif')     #在tkinter中默认gif图片
        self.l1 = Label(self,image=p)
        self.l1.pack()

if __name__=='__main__':
    root = Tk()  # 创建根窗口对象
    root.geometry("400x200+100+200")  # 设置窗口大小,位置
    root.title("一个经典的GUI对象")  # 设置窗口标题名
    # master就是一个固定参数,在这个位置表示的就是你的这个根窗口对象。换句话说master表示的是root这个对象
    app = Application(master=root)  # 定义好master,会自动传入Application类的构造器进行初始化

    root.mainloop()  # 调用事件循环

image.png

老师,请问这个显示图像的路径哪里有问题,为什么会报错呢?

Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 1383楼
Python 全系列/第二阶段:Python 深入与提高/(旧)坦克大战 1384楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 1386楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 1387楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 1388楼

image.png

Python 全系列/第二阶段:Python 深入与提高/文件处理 1390楼

#encoding=utf-8

from tkinter import *
import random
class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master=master
        self.pack()
        self.createWidget()

    def createWidget(self):
        self.canvas = Canvas(self, width=800, height=600, bg='green')
        self.canvas.pack()
        # 画一条直线
        self.line = self.canvas.create_line(10, 10, 30, 20, 40, 50)    # 坐标(10,10),(30,20),(40,50)
        # 画一个矩形
        self.rect = self.canvas.create_rectangle(50, 50, 100, 100)     # 左上角坐标(50, 50) 右下角坐标(100,100)
        # 画一个椭圆,坐标两双,为椭圆的边界矩形左上角和右下角
        self.oval = self.canvas.create_oval(50, 50, 100, 100)           # 绘制如上巨星的内切圆

        #global photo
        self.photo = PhotoImage(file="000.gif")
        self.canvas.create_image(550, 100, image=self.photo)

        Button(self, text='随机画出十个矩形', command=self.draw50Recg).pack(side='left')

    def draw50Recg(self):
        for i in range(0, 10):
            x1 = random.randrange(int(self.canvas['width'])/2)
            y1 = random.randrange(int(self.canvas['height'])/2)
            x2 = x1 + random.randrange(int(self.canvas['height'])/2)
            y2 = y1 + random.randrange(int(self.canvas['height'])/2)
            self.canvas.create_rectangle(x1, y1, x2, y2)

if __name__=="__main__":
    root = Tk()
    root.title('my window')
    root.geometry('500x300')
    app = Application(master=root)
    root.mainloop()

image.png

  1. 老师,为啥视频里,这里没有加self呢,我自己加上之后没啥区别。不加的化,这个变量就是灰色的,

  2. 为什么这里画一个图形啥的 不需要调用pack()呢

Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 1392楼

我的这个代码怎么按下键盘的上下左右  控制台没有输出

"""
新增功能
     添加事件
     1点击关闭 关闭窗口
     2按下键盘时候,判断键盘按下的是什么键,做如何处理

"""
import pygame
SCREEN_WIDTH=700
SCREEN_HEIGHT=500
BG_COLOR=pygame.Color(0,0,0)
class MainGame():
    window=None
    def __init__(self):
        pass
    #开始游戏
    def startGame(self):
        #加载主窗口
        pygame.display.init()
        #设置窗口的大小及显示
        MainGame.window=pygame.display.set_mode([SCREEN_HEIGHT,SCREEN_HEIGHT])
        #设置窗口的标题
        pygame.display.set_caption("坦克大战1.03")
        while True:
            #给窗口设置填充色
            MainGame.window.fill(BG_COLOR)
            #获取事件
            self.getEvent()
            pygame.display.update()

    #结束游戏
    def endGame(self):
        print("谢谢使用,欢迎再来")
        exit()

    #获取事件
    def getEvent(self):
        #获取所有事件
        eventList=pygame.event.get()
         #遍历事件
        for event in eventList:
            #判读按下的是关闭还是键盘
            #如果安的是退出,
            if event.type==pygame.QUIT:
                self.endGame()
                #如果是键盘的按下
                if event.type==pygame.KEYDONW:
                    #判断按下的是上,下,左,右
                    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 move(self):
        pass


    #射击
    def shot(self):
        pass
    #展示坦克的方法
    def display(self):
        pass
#我方坦克
class MyTank(Tank):
    def __init__(self):
        pass

class EnemyTank(Tank):
    def __init__(self):
        pass

#子弹类
class Bullet():
    def __init__(self):
        pass
    #移动
    def move(self):
        pass
    #展示子弹的方法
    def displayBullet(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 play(self):
        pass
if __name__=="__main__":
    MainGame().startGame()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 1393楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 1394楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637