Я пытался изменить размер метки на некоторое время, но это кажется НЕВОЗМОЖНЫМ или, по крайней мере, непостижимым для меня ...Как изменить размер метки?
Я объясню свою ситуацию с изображениями для ясности.
Это как окно выглядит с ярлыком "Normal" ...
Это как окно выглядит с смехотворно большим текстом ...
Так вот, как я хочу, чтобы это выглядело, когда текст смехотворно l arge
См.?
Вот пример кода:
# -*- coding: utf-8 -*-
import gi
import signal
import hashlib
import random
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Pango
class Test(Gtk.Window):
def __init__(self):
def center(a):
a.props.valign = Gtk.Align.CENTER
a.props.halign = Gtk.Align.CENTER
Gtk.Window.__init__(self, title="Test")
self.set_position(Gtk.WindowPosition.CENTER)
self.set_border_width(10)
self.set_resizable(False)
self.connect("delete-event", Gtk.main_quit)
Box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10)
Button = Gtk.Button("Change Label")
Label = Gtk.Label()
Test = "I'm a Label, Yay!"
center(Box)
center(Label)
center(Button)
Label.set_markup('<span><big>%s</big></span>' % Test)
Label.set_ellipsize(Pango.EllipsizeMode.END)
Label.set_justify(Gtk.Justification.LEFT)
self.add(Box)
Box.add(Label)
Box.add(Button)
#UNKNOWN/FORBIDDEN/DEPRECIATED/INCOMPREHENSIBLE MAGIC!
#Uncomment only one or both, and watch it's magic!
#self.set_resizable(True)
#Box.set_resize_mode(Gtk.ResizeMode.QUEUE)
def change_label(self):
Label.set_markup('<span><big>%s</big></span>' % str(hashlib.sha384(str(random.random())).hexdigest()))
Button.connect("clicked", change_label)
if __name__ == '__main__':
MainWindow = Test()
MainWindow.show_all()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
Пожалуйста, обратите внимание, что окно не изменяемыми.
Если вы раскомментируете один или оба раздела «Магия», вы увидите, как изменится его поведение Window!
НО
Есть два недостатка во время использования каждого из этого подходит:
Если раскомментировать
#self.set_resizable(True)
ОКНО СТАНЕТ перезначительном РАЗ, которые я не хочу, чтобы это произошло#Box.set_resize_mode(Gtk.ResizeMode.QUEUE)
представляется идеальным решением, но в то время как он делает то, что я хочу, кажется, он был «изношен» в последних версиях Gtk.
Кроме того, в некоторых других оконных менеджеров & темы, это вызывает некоторые сбои на габаритах окна при смене лейбла Струнный много раз.
У вас есть предложения по этому вопросу?
Я полностью устал от этого. Я пытаюсь в течение нескольких недель, без результата: c
Возможно, есть способ подражать поведению при изменении размера окна, а не показе Resize Grips & Maximize Button?
Или что нового метода set_resize_mode(Gtk.ResizeMode.QUEUE)
?
PD: Label.set_max_width_chars()
не то, что я ищу
Можете ли вы объяснить, почему 'set_max_width_chars()' не опция? –
Потому что это ограничивает слова до указанной длины, которую вы запросили. Это будет работать в некоторых случаях, но давайте представим, что вы можете добавить немецкий перевод. Например, на английском языке вы можете установить текст ярлыка «awesome» и «Label.set_max_width_chars» (7). На немецком языке текст Label будет «Ehrfurcht gebietend» (по крайней мере, это сказал Google Translator). – PythonNoob
Я понял. Нельзя ли использовать длину строки для установки значения ширины так, чтобы она соответствовала исходному тексту, а затем, если метка изменена, ширина остается неизменной. –