首页 > 编程问答 >我无法插入背景图像、进入全屏模式并关闭以前的窗口

我无法插入背景图像、进入全屏模式并关闭以前的窗口

时间:2024-07-30 17:13:15浏览次数:10  
标签:python python-3.x windows debugging tkinter

我正在编写一个根据该算法工作的程序(也就是说,当您单击某些按钮时,会出现另一个窗口或带有结果的最终窗口,并且当您单击按钮时应该从 Toplevel(opennewwindow(1))出现另一个窗口)我编写了这个程序的基本代码,但我未能在所有窗口上插入背景图像,以及为所有窗口设置全屏模式并关闭以前的窗口。这是代码(python 版本 - 3.10)

from tkinter import * #Выводит библиотеку окон
from tkinter.ttk import * #Выводит библиотеку дополнительных окон

master = Tk()#Названии опции
master.geometry("1920x1080")#Размер окна
master.title("Окно")#Названия окна\

bg=PhotoImage("C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg") 


def openNewWindow():#Опция нового окна
        newWindow = Toplevel(master)##Названии опции нового окна
        newWindow.title("Второе окно")#Названия окна нового окна
        newWindow.geometry('1920x1080')#Размер окна нового окна
        Label(newWindow, #Начало титульного вопроса нового окна
            text ="Вопрос №2").pack()# Конец  титульного вопроса нового окна

        btn = Button(newWindow,#Начало кнопки нового окна
                         text ="Да",#середина кнопки нового окна
                         command = openNewWindow)#Конец кнопки нового окна
        btn.pack(pady = 10)#Оформление кнопки нового окна
        btn = Button(newWindow,##Начало второй кнопки нового окна
                         text ="нет",#середина второй кнопки нового окна
                         command = openNewWindow1)#Конец второй кнопки нового окна
        btn.pack(pady = 10)#Оформление второй кнопки нового окна
        master.withdraw()
        openNewWindow1.withdraw()

def openNewWindow1():##Опция нового dd второго окна
        newWindow1 = Toplevel(master)###Названии опции нового окна
        newWindow1.title("Третье окно")##Названия окна нового окна
        newWindow1.geometry('1920x1080')##Размер окна нового окна
        Label(newWindow1, ##Начало титульного вопроса нового окна
            text ="Вопрос №3").pack()## Конец  титульного вопроса нового окна

        btn = Button(newWindow1,##Начало кнопки нового окна
                         text ="Да",##середина кнопки нового окна
                         command = openNewWindow)##середина кнопки нового окна#Конец кнопки нового окна
        btn.pack(pady = 10)##Оформление кнопки нового окна
        btn = Button(newWindow1,###Начало второй кнопки нового окна
                         text ="нет",##середина второй кнопки нового окна
                         command = openNewWindow2)##Конец второй кнопки нового окна
        btn.pack(pady = 10)##Оформление второй кнопки нового окна
        master.withdraw()
        openNewWindow.withdraw()

def openNewWindow2():##Опция нового dd третьего окна
        newWindow2 = Toplevel(master)###Названии опции нового третьего  окна
        newWindow2.title("Третье окно")##Названия окна нового третьего  окна
        newWindow2.geometry('1920x1080')##Размер окна нового третьего  окна
        Label(newWindow2, ##Начало титульного вопроса нового третьего  окна
            text ="Вопрос №4").pack()## Конец  титульного вопроса нового третьего  окна

        btn = Button(newWindow2,##Начало кнопки нового третьего  окна
                         text ="Да",##середина кнопки нового третьего  окна
                         command = openNewWindow)##середина кнопки третьего  нового окна#Конец кнопки нового третьего  окна
        btn.pack(pady = 10)##Оформление кнопки нового третьего  окна
        btn = Button(newWindow2,###Начало второй кнопки нового третьего  окна
                         text ="нет",##середина второй кнопки нового третьего  окна
                         command = openNewWindow1)##Конец второй кнопки нового третьего  окна
        btn.pack(pady = 10)##Оформление второй кнопки нового третьего   окна
        master.withdraw()
        openNewWindow.withdraw()




background = PhotoImage()
label = Label(master, image=bg, #Вопрос основного окна(начало)
              text ="Вопрос №1")##Вопрос основного окна(середина)
label.place(x=0, y=0)
label.pack(pady = 10)##Оформление основного окна(оформление)


btn = Button(master, ##Кнопка основного окна(начало)
                text ="Да", ##Кнопка основного окна(середина)
                command = openNewWindow)##Кнопка основного окна(середина)
btn.pack(pady = 10)##Оформление основного окна(начало)

btn = Button(master, ##Кнопка основного окна(начало)
                text ="Нет", ##Кнопка основного окна(середина)
                command = openNewWindow1)##Кнопка основного окна(середина)
btn.pack(pady = 10)##Оформление основного окна(начало)




btn.pack(pady = 10)#
mainloop()#Конец цикла и запуск команды

当我单击程序中的按钮时,出现此错误,文本在第一个窗口中消失,并且背景图像不出现:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 27, in openNewWindow
    openNewWindow1.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 27, in openNewWindow
    openNewWindow1.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 45, in openNewWindow1
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 63, in openNewWindow2
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:/Users/User/AppData/Local/Programs/Python/Python310/sffsfsf.py", line 45, in openNewWindow1
    openNewWindow.withdraw()
AttributeError: 'function' object has no attribute 'withdraw'

你的代码中有几个问题导致了错误和所需功能的缺失。以下是修正后的代码和解释:

from tkinter import *
from tkinter.ttk import *

def openNewWindow():
    master.withdraw()  # 隐藏主窗口
    global newWindow  # 声明newWindow为全局变量
    newWindow = Toplevel(master)
    newWindow.title("第二个窗口")
    newWindow.geometry('1920x1080')
    newWindow.attributes('-fullscreen', True) # 设置新窗口为全屏

    # 添加背景图片
    bg2 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
    label2 = Label(newWindow, image=bg2)
    label2.place(x=0, y=0, relwidth=1, relheight=1)
    label2.image = bg2 # 保留对图片的引用

    Label(newWindow, text="Вопрос №2").pack()

    btn = Button(newWindow, text="Да", command=openNewWindow)
    btn.pack(pady=10)
    btn = Button(newWindow, text="нет", command=openNewWindow1)
    btn.pack(pady=10)

def openNewWindow1():
    master.withdraw()  # 隐藏主窗口
    global newWindow1 # 声明newWindow1为全局变量
    newWindow1 = Toplevel(master)
    newWindow1.title("Третье окно")
    newWindow1.geometry('1920x1080')
    newWindow1.attributes('-fullscreen', True) # 设置新窗口为全屏

    # 添加背景图片
    bg3 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
    label3 = Label(newWindow1, image=bg3)
    label3.place(x=0, y=0, relwidth=1, relheight=1)
    label3.image = bg3 # 保留对图片的引用

    Label(newWindow1, text="Вопрос №3").pack()

    btn = Button(newWindow1, text="Да", command=openNewWindow)
    btn.pack(pady=10)
    btn = Button(newWindow1, text="нет", command=openNewWindow2)
    btn.pack(pady=10)

def openNewWindow2():
    master.withdraw()  # 隐藏主窗口
    global newWindow2 # 声明newWindow2为全局变量
    newWindow2 = Toplevel(master)
    newWindow2.title("Третье окно")
    newWindow2.geometry('1920x1080')
    newWindow2.attributes('-fullscreen', True) # 设置新窗口为全屏

    # 添加背景图片
    bg4 = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
    label4 = Label(newWindow2, image=bg4)
    label4.place(x=0, y=0, relwidth=1, relheight=1)
    label4.image = bg4 # 保留对图片的引用

    Label(newWindow2, text="Вопрос №4").pack()

    btn = Button(newWindow2, text="Да", command=openNewWindow)
    btn.pack(pady=10)
    btn = Button(newWindow2, text="нет", command=openNewWindow1)
    btn.pack(pady=10)

master = Tk()
master.geometry("1920x1080")
master.title("Окно")
master.attributes('-fullscreen', True) # 设置主窗口为全屏

# 添加背景图片
bg = PhotoImage(file="C:/Users/User/AppData/Local/Programs/Python/Python310/draw.jpg")
label = Label(master, image=bg)
label.place(x=0, y=0, relwidth=1, relheight=1)
label.image = bg # 保留对图片的引用

label1 = Label(master, text="Вопрос №1")
label1.pack(pady=10)

btn = Button(master, text="Да", command=openNewWindow)
btn.pack(pady=10)

btn = Button(master, text="Нет", command=openNewWindow1)
btn.pack(pady=10)

mainloop()

解释:

  1. withdraw() 的使用: 错误信息 AttributeError: 'function' object has no attribute 'withdraw' 是因为你试图在函数对象上调用 withdraw() 方法,而它应该被调用在窗口对象上。 因此,在每个 openNewWindow 函数中,我们首先使用 master.withdraw() 隐藏主窗口,而不是试图隐藏函数本身。

  2. 全局变量: 为了在函数内部正确地隐藏和显示窗口,你需要将 newWindow , newWindow1 newWindow2 声明为全局变量。 这可以通过在函数内部使用 global newWindow global newWindow1 global newWindow2 来实现。

  3. 背景图片:

    • 你需要在每个窗口创建函数中加载背景图片,而不是只在主窗口中加载。
    • 使用 label.place(x=0, y=0, relwidth=1, relheight=1) 将图片铺满整个窗口。
    • 使用 label.image = bg (以及其他窗口的类似代码) 来保留对图片对象的引用,防止图片被垃圾回收。
  4. 全屏模式:

    • 使用 window.attributes('-fullscreen', True) 来设置窗口为全屏模式,其中 window 是你要设置的窗口对象 (例如 master , newWindow 等).

通过这些修改,你的代码应该可以正常工作,并在每个窗口显示背景图片,并能够正确地切换和关闭窗口。

标签:python,python-3.x,windows,debugging,tkinter
From: 78810686

相关文章

  • 为什么 string.maketrans 在 Python 3.1 中不起作用?
    我是Python新手。怎么了这个在Python3.1中不起作用?fromstringimportmaketrans#Requiredtocallmaketransfunction.intab="aeiou"outtab="12345"trantab=maketrans(intab,outtab)str="thisisstringexample....wow!......
  • windows下jdk版本切换(bat)
    1.jdk下载Oracle官网https://www.oracle.com/cn/资源->下载->Java下载jdk当前最新版本jdk22版本jdk8版本当前页面向下拉2.脚本如下:点击查看代码@echooffchcp65001>nulecho****************jdkchangeutil*************************echo此操作需要管理员权......
  • Tkinter ttkbootstrap 上的属性错误
    所以我使用tkinterttkbootstrap编写这个应用程序。它在主窗口上运行良好,但是当我尝试在新窗口中打印函数的结果时,它说AttributeError:'str'objecthasnotattribute'get'我对编码完全陌生,所以我将不胜感激。这是代码:fromtkinterimport*fromttkbootstrap.......
  • Python - Creating alternative initializers using class Methods
    Classmethodsallowustodefinealternativeinitializers(alsoknownasfactorymethods)inaclass.Thesemethodshelpuscreateinstanceobjectsfromdifferenttypesofinputdata.Letusunderstandthiswiththehelpofanexample.Again,wetakethe......
  • 如何让 Python 请求信任自签名 SSL 证书?
    importrequestsdata={'foo':'bar'}url='https://foo.com/bar'r=requests.post(url,data=data)如果URL使用自签名证书,则会失败requests.exceptions.SSLError:[Errno1]_ssl.c:507:error:14090086:SSLroutines:SSL3_GET_SERVER_CERTIF......
  • python 偏函数
    如下代码loop=tornado.ioloop.IOLoop.current()ctx=contextvars.copy_context()func_call=functools.partial(ctx.run,func,*args,**kwargs)returnawaitloop.run_in_executor(executor,func_call)偏函数一个函数作为模板,通过提供部分参数来产生一个新的函数。......
  • Chapter 18 Python异常
    欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!文章目录前言一、什么是异常二、捕获异常三、异常的传递前言在Python中,异常是一种特定的对象,能够在程序运行过程中被抛出和处理。有效地管理异常不仅可以增强程序的稳定性,还可以提高用户体验,使程......
  • Python正则表达式匹配数字的第一次重复
    示例:For0123123123,1应匹配,因为第二个1出现在任何其他数字重复之前。For01234554321,5应该匹配,因为第二个5出现在任何其他数字的重复之前。我尝试过的一些正则表达式:......
  • 当 python 极坐标中某些列条目为空时,如何分解 List[_] 列?
    给定如下所示的Polarsdf,如何在两列上调用explode(),同时将空条目扩展到正确的长度以与其行匹配?shape:(3,2)┌───────────┬─────────────────────┐│x┆y││---┆---......
  • 使用python从网站自动下载pdf时出错
    我想从一个名为epadossier.nl的网站自动批量下载pdf我用谷歌搜索了这个并找到了一段代码并修复了一个小错误。所以现在我得到了这个`importrequestsurl="https://www.epadossier.nl/adres/plaats/straat/num"response=requests.get(url)ifresponse.status_cod......