会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132358个问题

屏幕截图 2022-03-06 122558.jpg

为什么我的代码运行不起来呀,是什么忘记打了吗


Python 全系列/第二阶段:Python 深入与提高/异常机制 108楼
Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 109楼
Python 全系列/第二阶段:Python 深入与提高/GUI编程(隐藏) 110楼

#测试Text多行文本
from tkinter import *
import webbrowser

class Application(Frame):

    def __init__(self,master=None):
        super().__init__(master)
        self.master=master
        self.pack()
        self.createWidget()

    def createWidget(self):   #定义框内容以及属性

        self.w = Text(root,width=40,height=10,bg="white",font=("宋体",18))
        self.w.pack()
        #self.w.insert(1.0)代表在第1行0列插入内容
        #行:123...;列:012...
        self.w.insert(1.0,"0123456789\n0纵观世界与天下\n奇闻异事")
        self.w.insert(2.3, "xxx")

        Button(self, text="重复插入文本", command=self.insertText).pack(side="left")
        Button(self, text="命令行返回文本", command=self.returnText).pack(side="left")
        Button(self, text="添加图片", command=self.addImage).pack(side="left")
        Button(self, text="添加组件", command=self.addWidget).pack(side="left")
        Button(self, text="通过tag精确控制文本", command=self.TextTag).pack(side="left")  #Tag标记


    def insertText(self):
        #INSERT代表从光标处插入内容
        #END在末尾插入内容
        self.w.insert(INSERT,"HE")
        self.w.insert(END, "ST")
        #在指定位置插入指定文本内容
        self.w.insert(2.8,"acz")   #在第2行第8列的位置插入

    def returnText(self):
        #获取文本的内容,并在命令行打印输出,get(初始位置, 终止位置)--获得该区域内容
        print(self.w.get(2.0, 2.5))
        print("文本所有内容:" + self.w.get(1.0, END))

    def addImage(self):
        #添加图片image_create()
        #定义全局变量globle p 或 对象属性self.p
        #global p
        self.p = PhotoImage(file="imgs/13.gif")
        self.w.image_create(END, image=self.p)

    def addWidget(self):
        #添加组件window_create()
        b=Button(self.w,text="点击")  #master为建好的文本域self.w
        self.w.window_create(INSERT,window=b)

    def TextTag(self):
        self.w.delete(1.0,END)
        self.w.insert(1.0,"good dood study!\n尚学堂\n百度一下,你就知道")
        #Tag--标记
        self.w.tag_add("IM",1.0,1.5)   #在指定区域内添加标记,将标记命名为good
        #标记属性定义,标记backgrond背景色,foreground标记体颜色,underline下划线
        self.w.tag_config("IM",background="yellow",foreground="red",underline=True)
        #标记事件绑定,即点击会出现的情况
        self.w.tag_add("bd", 3.0, 3.2)  # 在指定区域内添加标记
        self.w.tag_config("bd",background="blue",underline=True)
        self.w.tag_bind("bd","<Button-1>",self.webshow)  #<Button-1>点击左键

    #定义参数event,将<Button-1>点击左键作为参数event传入
    def webshow(self,event):
        webbrowser.open("https://www.baidu.com/")


if __name__=="__main__":
    root=Tk()                        #创建框大小、位置以及标题
    app=Application(master=root)
    root.title("Text_test")
    root.geometry("500x300+450+200")
    root.mainloop()

老师,请问这个为什么这个程序中图片部分的不能显示,点了没反应是为什么呢?没有图片出来?


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

import pygame,time,random

SCREEN_WIDTH = 700

SCREEN_HEIGHT = 500

BG_COLOR=pygame.Color((0,0,0))

TEXT_COLOR=pygame.Color(255,0,0)

 

class MainGame():

    window=None

    my_tank = None

    # 存储敌方坦克的列表

    enemyTankList=[]

    #定义敌方坦克的数量

    enemyTankCount=5

    def __init__(self):

        pass

    #开始游戏

    def startGame(self):

        #加载主窗口

        #初始化主窗口

        pygame.display.init()

        #设置窗口的大小及显示

        MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])

        #初始化我方坦克

        MainGame.my_tank=Tank(350,250)

        #初始化敌方坦克,并将敌方坦克添加到列表中

        self.createEnemyTank()

 

        # 设置窗口标题

        pygame.display.set_caption("坦克大战")

        while True:

            #式坦克移动的速度慢一点

            time.sleep(0.02)

            # 设置填充色

            MainGame.window.fill(BG_COLOR)

            #获取事件

            self.getEvent()

            #绘制文字

            MainGame.window.blit(self.getTextSurface("敌方坦克剩余数量%d"%len(MainGame.enemyTankList)),(10,10))

            #调用坦克显示的方法

            MainGame.my_tank.displayTank()

            #循环遍历地方坦克列表,展示敌方坦克

            self.blitEnemyTank()

            #调用移动方法

            #如果坦克的开关是开启,才可以移动

            if not MainGame.my_tank.stop:

                MainGame.my_tank.move()

            pygame.display.update()

 

    # 初始化敌方坦克,并将敌方坦克添加到列表中

    def createEnemyTank(self):

        top=100

        #循环生成敌方坦克

        for i in range(MainGame.enemyTankCount):

            left = random.randint(0,600)

            speed = random.randint(1,4)

            enemy = EnemyTank(left,top,speed)

            MainGame.enemyTankList.append(enemy)

 

    # 循环遍历地方坦克列表,展示敌方坦克

    def blitEnemyTank(self):

        for enemyTank in MainGame.enemyTankList:

            enemyTank.displayTank()

            enemyTank.randMove()

 

    #结束游戏

    def endGame(self):

        print("再见")

        exit()

    #左上角文字的绘制

    def getTextSurface(self,text):

        #初始化字体模块

        pygame.font.init()

        #查案所有字体的名称

        #print(pygame.font.get_fonts())

        #获取字体Font对象

        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:

                    # 切换方向

                    MainGame.my_tank.direction = 'L'

                    #修改坦克的开关状态

                    MainGame.my_tank.stop=False

                    #MainGame.my_tank.move()

                    print('按下左键,坦克向左移动')

                elif event.key == pygame.K_RIGHT:

                    # 切换方向

                    MainGame.my_tank.direction = 'R'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    #MainGame.my_tank.move()

                    print('按下右键,坦克向右移动')

                elif event.key == pygame.K_UP:

                    # 切换方向

                    MainGame.my_tank.direction = 'U'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    # MainGame.my_tank.move()

                    print('按下上键,坦克向上移动')

                elif event.key == pygame.K_DOWN:

                    # 切换方向

                    MainGame.my_tank.direction = 'D'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    # MainGame.my_tank.move()

                    print('按下左键,坦克向下移动')

                elif event.key==pygame.K_SPACE:

                    print("发射子弹")

 

 

            #松开方向键,坦克停止移动,修改坦克的开关状态

            if event.type == pygame.KEYUP:

                #判断松开是键是上下左右的时候才停止坦克移动

                if event.key==pygame.K_UP or event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT or event.key==pygame.K_DOWN:

                    MainGame.my_tank.stop=True

 

class Tank():

    #添加距离左边,距离上边

    def __init__(self,left,top):

        self.images={

            'U':pygame.image.load('learning/img/p1tankU.gif'),

            'D':pygame.image.load('learning/img/p1tankD.gif'),

            'L':pygame.image.load('learning/img/p1tankL.gif'),

            'R':pygame.image.load('learning/img/p1tankR.gif'),

        }

        #方向

        self.direction='U'

        #根据当前图片的方向获取图片

        self.image =self.images[self.direction]

        #获取区域

        self.rect=self.image.get_rect()

        #设置区域的lefttop

        self.rect.left = left

        self.rect.top = top

        #速度

        self.speed=5

        #坦克移动的开关

        self.stop=True

 

 

    #移动

    def move(self):

        # 判断坦克的方向进行移动

        if self.direction == 'L':

            if self.rect.left>0:

                self.rect.left -= self.speed

        elif self.direction == 'U':

            if self.rect.top>0:

                self.rect.top -= self.speed

        elif self.direction == 'D':

            if self.rect.top+self.rect.height<SCREEN_HEIGHT:

                self.rect.top += self.speed

        elif self.direction == 'R':

            if self.rect.left+self.rect.height<SCREEN_WIDTH:

                self.rect.left += self.speed

 

 

    #射击

    def shot(self):

        pass

    #展示坦克的方法

    def displayTank(self):

        #获取展示的对象

        self.image=self.images[self.direction]

        #调用blit方法展示

        MainGame.window.blit(self.image,self.rect)

 

#我方坦克

class MyTank(Tank):

    def __init(self):

        pass

 

#敌方坦克

class EnemyTank(Tank):

    def __init(self,left,top,speed):

        #加载图片集

        self.imges={

            'U': pygame.image.load('learning/img/enemy1U.gif'),

            'D': pygame.image.load('learning/img/enemy1D.gif'),

            'L': pygame.image.load('learning/img/enemy1L.gif'),

            'R': pygame.image.load('learning/img/enemy1R.gif'),

        }

        #方向,随机生成敌方坦克的方向

        self.direction=self.randDirection()

        #根据方向获取图片

        self.image=self.images[self.direction]

        #区域

        self.rect=self.image.get_rect()

        #lefttop进行赋值

        self.rect.left=left

        self.rect.top=top

        #速度

        self.speed=speed

        #移动开关键

        self.flag=True

        #新增步数变量

        self.step=60

 

    def randDirection(self):

        num=random.randint(1,4)

        if num == 1:

            return'U'

        elif num == 2:

            return 'D'

        elif num == 3:

            return 'L'

        elif num == 4:

            return 'R'

 

    #敌方坦克随即移动的方法

    def randMove(self):

        if self.step<=0:

            #修改方向

            self.direction=self.randDirection()

            #让步数复位

            self.step=60

        else:

            self.move()

            #让步数递减

            self.step-=1

 

 

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()

    #MainGame().getTextSurface()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 113楼
Python 全系列/第二阶段:Python 深入与提高/文件处理 115楼

填充白色之后

窗口一闪而过不能一直保存,注释掉fill之后又可以了

导入 pygame


BG_COLOR = pygame色度(255,255,255)


坦克类

    def __init__个体经营):

        pass


    def display个体取录):


        pass


    def move自身):


        pass


    def shot个体取录):


        pass


MyTankTank):

   

    def __init__个体经营):

        pass


兵种 EnemyTankTank):


    def __init__个体经营):

        pass

   

Bullet

   

    def __init__个体经营):

        pass


    def display_bullet个体经营):


        pass


    def move自身):


        pass

   

Wall

   

    def __init__个体经营):

        pass


    def display_wall个体经营):


        pass


Explode

    def __init__个体经营):

        pass


    def display_explore个体经营):

        pass



音乐类

    def __init__个体经营):

        pass


    def play_music个体经营):

        pass


class MainGame:


    window = None

   

    def __init__(self):

        pass


    def start_game(self):

        pygame.display.init()


        MainGame.window=pygame.display.set_mode((700,600))


        pass

        pygame.display.set_caption("欢迎")


        while True:

            # MainGame.winow.fill(BG_COLOR)

            pygame.display.update()

    def end_game(self):

        pass



if __name__ == "__main__":

    MainGame().start_game()



Python 全系列/第二阶段:Python 深入与提高/坦克大战 118楼
Python 全系列/第二阶段:Python 深入与提高/异常机制 119楼

from tkinter import *
from tkinter import messagebox
import random


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()

    def createWidget(self):
        btnText = (("MC", "M+", "M-", "MR"),
                   ("C", "±", "÷", "x"),
                   (7, 8, 9, "-"),
                   (4, 5, 6, "+"),
                   (1, 2, 3, "="),
                   (0, "."))

        Entry(self).grid(row=0,column=0,columnspan=4,pady=10)


        for rindex, r in enumerate(btnText):
            for cindex, c in enumerate(r):
                if c == "=":
                    Button(self, text=c, width=2)\
                    .grid(row = rindex+1, column=cindex, rowspan=2, sticky=NSEW)
                elif c == 0:
                    Button(self, text=c, width=2)\
                    .grid(row=rindex+1, column=cindex, columnspan=2, sticky=NSEW )
                elif c == ".":
                    Button(self, text=c,width=2)\
                    .grid(row=rindex+1, column=cindex+1, sticky=NSEW)
                else:
                    Button(self, text=c,width=2)\
                    .grid(row=rindex,column=cindex,sticky=NSEW)




if __name__ == '__main__':
    root = Tk()
    root.geometry("500x500+200+200")
    app = Application(master=root)
    root.mainloop()


JMR`IWPAPX3)$@0Y5AUZG0D.png


老师,我第一次可以打包成功,但后来就不行了,

这个是什么意思呢?

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

课程分类

百战程序员微信公众号

百战程序员微信小程序

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