Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x tkinter窗口在不可缩放时在缩放状态下更改大小_Python 3.x_Tkinter_Fullscreen_Resizable - Fatal编程技术网

Python 3.x tkinter窗口在不可缩放时在缩放状态下更改大小

Python 3.x tkinter窗口在不可缩放时在缩放状态下更改大小,python-3.x,tkinter,fullscreen,resizable,Python 3.x,Tkinter,Fullscreen,Resizable,因此,我遇到了一个问题,我希望有一个(最初)全屏窗口,它有时可以调整大小,有时不能。但我发现(在windows上)当我将其设置为不可缩放时,它会改变其大小以填充整个窗口,包括任务栏,我不希望它这样做。我希望它保持原来的大小,当我设置它缩放(显然) 操作系统:Windows 10 Home Python:3.7 Tk/Tcl:8.6 可复制示例: 从tkinter导入Tk root=Tk() root.state('zoomed')#直到这里一切正常 root.reshable(False,F

因此,我遇到了一个问题,我希望有一个(最初)全屏窗口,它有时可以调整大小,有时不能。但我发现(在windows上)当我将其设置为不可缩放时,它会改变其大小以填充整个窗口,包括任务栏,我不希望它这样做。我希望它保持原来的大小,当我设置它缩放(显然)

  • 操作系统:Windows 10 Home
  • Python:3.7
  • Tk/Tcl:8.6
可复制示例:

从tkinter导入Tk
root=Tk()
root.state('zoomed')#直到这里一切正常
root.reshable(False,False)#这里任务栏被隐藏
root.mainloop()

最后,我得到了这个,这是你想要的吗

from tkinter import *

def SetSize():
    width, height, X_POS, Y_POS = root.winfo_width(), root.winfo_height(), root.winfo_x(), root.winfo_y()
    root.state('normal')
    root.resizable(0,0)
    root.geometry("%dx%d+%d+%d" % (width, height, X_POS, Y_POS))

root=Tk()
root.state('zoomed') #until here is everything normal
root.after(100,SetSize)
root.mainloop()

在玩弄了几番jizhihaoSAMAs解决方案和我自己的想法后,我想到了以下几点:

从tkinter导入*
类应用程序(Tk):
定义初始化(自):
Tk.\uuuuuu初始(自我)
self.state('缩放')
self.update()
self.maxsize(-1,self.winfo_height())
self.state('normal')
self.wip=False
self.lastgeom=无
自我约束(“”,自我采纳)
#在禁用并重新启用缩放状态下的大小调整后不使用此选项
#窗口将恢复到正常状态,但不会恢复到以前的大小
#所以这个行为在这里是安全的
自我绑定(“”,自我锁定大小)
#启用/禁用活动调整大小
def采用(自身、事件):
如果不是self.wip:
self.wip=True
如果self.state()
self.state('normal')
self.update()
self.lastgeom=self.geometry()
self.state('缩放')
elif self.state()=='normal'和self.lastgeom:
self.geometry(self.lastgeom)
self.lastgeom=无
self.wip=False
def锁大小(自身、事件):
如果self.resizable()[0]:self.resizable(False,False)
else:self.reshable(True,True)
如果“名称”=“\uuuuuuuu主要”:
App().mainloop()

我知道它有点笨重,但它很有魅力。

嗯,你的意思是你想显示任务栏。对吗?对。正常情况下,任务栏在缩放状态下显示,但如果
resizeable
设置为
False,False
,则不会显示。是的,这很有帮助,谢谢。尽管通过
winfou y
获取y坐标会导致窗口在屏幕顶部达到峰值。对我来说,它的工作原理是将y位置的请求替换为文字0。但我不知道这是否适用于所有操作系统,甚至是Windows版本。我很有信心不是这样的。@numer42o祝你好运。我对你的解决方案不太满意,所以我又玩了一些,想出了一些东西,它现在不是完美的,而是以一种更“自然”的方式工作。将其作为另一个答案发布。