#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. Итак, я не знаю, как вставить вашу функцию в мою внутреннюю функцию или как использовать ее в моей структуре кода?