Как я могу изменить размер диалогового окна «askstring» в Tkinter? на языке python

#python #tkinter

Вопрос:

 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 диалоговое окно? связанная функция-это тело (), я не могу найти способ использовать ее и изменить размер диалогового окна.

Комментарии:

1. что именно означает эта инструкция «вернуть виджет, который должен иметь начальный фокус»? все равно она не сработала. Мои три дня посвящены только этой проблеме. 🙁

2. это именно то, что он говорит, например, у вас есть запись виджет entry = Entry(master) и entry.pack() гору, и вы хотите, что фокус клавиатуры находится на этой конкретной записи виджет, когда диалоговое окно отображается, так что вы можете return entry в конце функции, и он будет установить фокус на том, что вступление после открытия, не нужно использовать это кстати

Ответ №1:

Для изменения ширины и высоты Dialog вы можете сделать следующее: вызовите .geometry body метод:

 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)  

Комментарии:

1. извините, но мне нужно спросить об этом (мне неудобно использовать ООП) Как я могу использовать этот код внутри своего класса? Спасибо.

2. @ugur что ты имеешь в виду? классы являются частью ООП (поэтому ваш вопрос об использовании кода в классе и утверждение о том, что вам неудобно с ООП, противоречивы), и что такое ваш класс? предоставленный вами код не является python, и вы пометили python, и нет другого способа написать это, кроме того, что я показал, вы должны наследовать Dialog и переопределять его методы, чтобы добавить свою собственную функциональность

3. Я изменил свой вопрос, чтобы быть более ясным. Не могли бы вы показать свое решение в моем коде? Спасибо.

Ответ №2:

Ну, если вы хотите изменить геометрию 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()  

Нужно запланировать звонок после открытия диалогового окна, чтобы функция, которая будет получать на детей корневого окна и диалога родитель установлен как root (также автоматически, но лучше быть явным), то он также появится в этом списке, он должен быть последним, но есть и выезд на место чтобы проверить, если он на самом деле является экземпляром Dialog (т. к. Dialog где-то до принятия наследства цепи и он наследует от Toplevel которого есть .geometry метод, который позволяет изменить геометрию окна).

Комментарии:

1. При этом создается только новое окно, но диалоговое окно остается прежним. В текущей ситуации мы не можем изменить размер диалогового окна, поскольку параметры ограничены. заголовок, приглашение доступны, мне нужно добавить ширину и высоту, чтобы внести необходимые изменения в диалоговое окно Tkinter «askstring». Итак, как мы можем изменить коробку?

2. можно ли прочитать название ? Я хочу исправить диалоговое окно в одном месте и прочитать весь заголовок. Например: «Этот массаж слишком длинный, чтобы читать через некоторое время» отображается на коробке как «Этот массаж…».

3. @ugur, да, изменив геометрию окна, как я показал в своем ответе, прямо сейчас у меня нет доступа к компьютеру, поэтому я мало чем могу помочь, вернусь в понедельник

4. спасибо, в настоящее время я опробую ваше решение.

5. мой «tk.messagebox.askstring(заголовок=,приглашение=)» работает внутри внутренней функции, расположенной внутри класса. Поэтому я использую его для расчета. Например: «Как тебя зовут? если ответ == строка: member_numbers= 1. Итак, я не знаю, как вставить вашу функцию в мою внутреннюю функцию или как использовать ее в моей структуре кода?