如何在Tkinter中修改“askstring”对话框的大小?用python

2024-09-30 00:36:47 发布

您现在位置:Python中文网/ 问答频道 /正文

import tkinter.commondialog
from tkinter import filedialog, Tk, Frame, Label, PhotoImage, Button, simpledialog
import form
from PIL import ImageTk, Image
import tkinter as tk
from tkinter import messagebox
import json

from tkinter.simpledialog import Dialog
from tkinter import commondialog  



class My_Class():
    def__init__(self):
        self.my_list=["a"]

     def my_function(self):

         list=["s","ss","df"]
        for i in list:
            q=tkinter.simpledialog.askstring(text="",prompt=i)

当我搜索相关问题时,我没有看到Python的答案,是的,Django,android可用,但我们如何实现askstring对话框? 一个相关函数是body(),我找不到使用它和调整对话框大小的方法


Tags: fromimportselftkintermydefframelabel
2条回答

要更改Dialog的宽度和高度,可以执行以下操作:在body方法中调用.geometry

from tkinter import Tk
from tkinter.simpledialog import Dialog


class MyDialog(Dialog):
    def __init__(self, parent, title=None, width=300, height=200):
        # all variables should be initialized before calling 
        # `super` because it calls .wait_window
        self.width = width
        self.height = height
        super().__init__(parent, title)

    def body(self, master):
        self.geometry(f'{self.width}x{self.height}')


root = Tk()
root.withdraw()

MyDialog(root)

如果你想改变tkinter.simpledialog.ask[string, integer, float]的几何结构,那么必须这样做:

from tkinter import Tk, Button
from tkinter.simpledialog import askstring, Dialog


def change_geometry():
    widget = root.winfo_children()[-1]
    if isinstance(widget, Dialog):
        widget.geometry('500x500')


def show_dialog():
    root.after(10, change_geometry)
    return askstring('Title', 'prompt', parent=root)


root = Tk()
root.geometry('300x200')

Button(root, text='ask string', command=show_dialog).pack()

root.mainloop()

必须在打开对话框后安排调用一个函数,该函数将获取根窗口的子对象,并且由于对话框的父对象被设置为根对象(也是自动的,但最好是显式的),那么它也将出现在该列表中,它应该是最后一个,但是有一个检查来检查它是否确实是Dialog的实例(因为Dialog位于继承链的某个位置,并且它从Toplevel继承,后者具有允许更改对话框几何结构的.geometry方法)

相关问题 更多 >

    热门问题