Zenity 대화 상자 창 높이가 너무 높아 크기를 조정할 수 없습니다. 오류를 해결한 사람이 있나요?

Zenity 대화 상자 창 높이가 너무 높아 크기를 조정할 수 없습니다. 오류를 해결한 사람이 있나요?

나는 선(禪) 방식으로 일을 하려고 노력하고 있지만, 그것은 나를 미치게 만듭니다. 내 문제를 설명하려면 다음 명령을 실행해 보십시오.

zenity --info --text "Hello there friends."

충분히 간단합니다. 이제 이것을 시도해 보세요:

zenity --info --text " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

대화 상자가 상당히 커지는 것을 확인하세요.

따라서 대화 상자의 너비를 조정할 수 있습니다. 특히 너비를 최대한 작게 만들려고 하면 어떤 일이 발생하는지 확인하세요. 이것은 다음 요점을 설명합니다. 높이를 아래쪽으로 전혀 조정할 수 없습니다. 대화 상자가 가능한 가장 작은 크기로 수평으로 압축된 경우 필요한 높이를 기준으로 엄격한 최소값이 있는 것 같습니다.

짧은 메시지에는 이 모든 것이 중요하지 않지만 긴 메시지가 있는 경우에는 어떻게 됩니까? 확인 버튼이 화면에서 사라질 정도로 대화 상자가 커지기 위해 많은 입력을 할 필요가 없습니다. 이는 사용자에게 큰 문제입니다.

버그 보고서는 다음과 같습니다: FS#34164: [zenity] - 잘못된 대화 상자 크기 https://bugs.archlinux.org/task/34164

하지만 그 패치는 나에게 아무 소용이 없었습니다. 내 최종 사용자가 자신의 컴퓨터에 Zenity를 설치했지만 나는 그들의 Zenity를 패치할 수 없습니다.

이 문제를 해결할 방법이 있나요? 글쓰기에 관한 조언이나 기타 조언이 있나요?

답변1

추가 --no-wrap하면 zenity해결되는 것 같습니다.

편집 #1

더 테스트해본 결과 이는 zenity버그인 것 같습니다.

zenity텍스트 줄 바꿈( 기본적으로 수행됨)을 사용하면 창 높이가 최소 창 너비를 기준으로 설정되고 텍스트 줄 바꿈으로 인해 해당 크기가 더 커지는 것 같습니다. 그러나 결과 대화 상자가 훨씬 더 넓어져서 텍스트 줄바꿈이 짧아지고 창의 길이가 텍스트에 비해 너무 커집니다.

두 가지 해결책이 있습니다

  1. --no-wrap줄 바꿈을 끄기 위해 추가되었습니다 . 텍스트가 너무 넓지 않으면 이것을 사용할 수 있지만 너무 넓으면 대화 상자가 화면에 비해 너무 넓어지고 텍스트가 하드코딩된 경우 수동으로 줄바꿈할 새 줄을 만들어야 할 수도 있습니다. 텍스트가 어딘가에서 자동으로 생성된 경우 fold텍스트를 맞추기 위해 명령을 살펴봐야 할 수도 있습니다 .

  2. 어떤 이유로 문제는 이에 영향을 받지 않는 것으로 보이며 대화 상자 크기가 더 합리적 --warning --info입니다 --error. --question여기서 문제는 질문 아이콘과 함께 오류 대화 상자가 나타난다는 것입니다. 또한 "확인" 버튼 대신 "예" 및 "아니요" 버튼이 표시됩니다.

답변2

또한 크기를 기본값 이하로 줄이는 방법도 찾지 못했습니다. gxmessage한번 시도해 볼 수도 있습니다 . 축소할 수 있지만 축소할 수 있는 최소 크기도 있습니다. zenity제 생각에는 글꼴 크기 선택과 창 크기보다 더 나은 제어 인터페이스가 있다고 생각합니다.

$ gxmessage -center -timeout 60 -font "monospace 9" -buttons "Okay":1 
    -geometry 300x50 --wrap \
    " Hello there friends. Hello there friends. Hello there friends. Hello there friends."

                                       gxmessage SS

.gtkrc-2.0

GTK+ 애플리케이션의 외관을 정말로 제어하고 싶다면 리소스 파일을 이용하는 것이 적절한 방법이라고 생각합니다 $HOME/.gtkrc-2.0. 여기에서 고정 폭 글꼴을 재정의하기 위해 글꼴과 같은 항목을 추가할 수 있습니다. 실험 목적으로 복사본을 만들고 .gtkrc-2.0이름을 .gtkrc-20.mono8.

다음 명령은 기본 글꼴을 고정 폭 글꼴 8로 만듭니다.

# $HOME/.gtkrc-2.0.mono8
style "font" {
 font_name = "monospace 8"
}
widget_class "*" style "font"
gtk-font-name = "monospace 8"

그러면 GTK+ 애플리케이션이 해당 파일을 사용할지 여부를 다음과 같이 제어할 수 있습니다:

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 <gtk app>

따라서 zenity여기서는 기본값이 사용됩니다.

                    기본 zenity rc 파일

이것은 리소스 파일을 zenity사용하고 있습니다 .gtkrc-2.0.mono8.

                  mono8 제니티 rc 파일

노트:위에서 사용한 명령은 다음과 같습니다.

$ GTK2_RC_FILES=.gtkrc-2.0.mono8 zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

GTK 기생충

.gtkrc-2.0따라서 이 파일을 통해 GTK+ 애플리케이션을 제어할 수 있지만 이 파일에 어떤 옵션을 넣을 수 있는지 알 수 있습니다 . 음, 이 문제를 해결하는 앱이 있습니다. 8-)GTK 기생충. 내 Fedora 저장소에 gtkparasite.

일단 설치되면 다음과 같이 GTK+ 애플리케이션에 대해 호출할 수 있습니다:

$ GTK_MODULES=gtkparasite <gtk app>

그럼 다음과 같이 전화해 봅시다 zenity:

$ GTK_MODULES=gtkparasite zenity --info --title="Status" --text \
    "Hello there friends. Hello there friends. Hello there friends."

일부 하위 구성 요소의 간격을 변경하고 아이콘을 숨기면 zenity크기를 440x65로 줄일 수 있습니다.

                  리틀 젠 ​​SS

답변3

이것은 오래된 버그인 것 같은데 이 버그가 수정되었는지 확실하지 않습니다. 하지만 Linux Mint 17.1에서는 여전히 이 문제가 발생합니다. 그러나 나는 나에게 효과가 있었고 다른 사람들에게도 효과가 있을 수 있는 해결 방법을 찾았습니다.

옵션은 --no-wrap문제에 대한 해결책입니다(앞서 언급했듯이). --width및 옵션을 생략 --height하거나 필요한 최소값으로 설정하세요. 그런 다음 옵션을 추가합니다 --no-wrap. 이제 줄바꿈(문장)을 원하는 위치에 사용하세요 \n. 팝업 창의 너비는 가장 긴 문장에 맞게 자동으로 조정됩니다. \n\n빈 줄을 만드는 데 사용됩니다 .

예는 다음과 같습니다.

zenity --warning --title="Zenity | Workaround excessive height" --width=100 --height=100 --no-wrap --text="<big><b>Zenity problem:\n Excessive height with long text.</b></big>\n\nSomehow Zenity's option '<b>--height</b>' doesn't seem to do the job.\nHowever, this doesn't have to spoil your fun! Omit the '<b>--width</b>'\nand '<b>--height</b>' option or set it to the minimum value you require.\nAnd add the '<b>--no-wrap</b>' option. Now use '<b>\\\n</b>' wherever you want\nto break the line (sentence). The width of the popup will adjust\nitself to the longest sentence."

추신. 설명을 개선하고 터미널에서 실행되지 않기 때문에 예제를 대체했습니다(하지만 스크립트에서는 제대로 실행됩니다).

답변4

--width와 --height를 모두 지정하면 작동한다는 것을 알았습니다. --width만 지정하면 아무런 효과가 없습니다.

관련 정보