第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

滾動(dòng)到 GtkListBox 中的選定行

滾動(dòng)到 GtkListBox 中的選定行

Go
幕布斯7119047 2022-06-13 10:59:55
我在這里有點(diǎn)沒(méi)有想法。我想要一件非常簡(jiǎn)單的事情:能夠以GtkListBox編程方式選擇給定的行,然后滾動(dòng)列表框(包含在 aScrolledWindow和 a中Viewport)。選擇一行是微不足道的(我的代碼是 Go & gotk3,但這不是那么重要):listBox.SelectRow(row)但是滾動(dòng)到該行被證明是一個(gè)真正的挑戰(zhàn)。無(wú)論我嘗試什么,我都失敗了:我試圖集中這一行,但沒(méi)有任何幫助我試圖用 來(lái)計(jì)算行的 Y 坐標(biāo)gtk_widget_translate_coordinates(),但它對(duì)任何行都返回 -1也許我可以找出列表框頂部和底部的哪一行,并用它來(lái)滾動(dòng),ScrolledWindow但我不知道該怎么做。更新:我已經(jīng)嘗試過(guò)這里的建議:手動(dòng)滾動(dòng)到 Gtk.ScrolledWindow 中的孩子,但它沒(méi)有工作,因?yàn)槿匀粵](méi)有滾動(dòng)發(fā)生:listbox.SelectRow(rowToSelect)listbox.SetFocusVAdjustment(listbox.GetAdjustment())if rowToSelect != nil {    rowToSelect.GrabFocus()}我也使用下面的代碼對(duì) 's child 進(jìn)行了同樣的嘗試rowToSelect,但無(wú)濟(jì)于事:if c, err := rowToSelect.GetChild(); err == nil {    c.GrabFocus()}
查看完整描述

2 回答

?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

感謝 Emmanuel Touzery 的提示,我終于搞定了。我不必使用計(jì)時(shí)器,但問(wèn)題確實(shí)是在填充列表框的那一刻,該行尚未實(shí)現(xiàn),因此不可能發(fā)生坐標(biāo)轉(zhuǎn)換。


我所做的是使用 GLib's 安排滾動(dòng)idle_add(),這使它在下游發(fā)生,這似乎工作得很好:有關(guān)詳細(xì)信息,請(qǐng)參閱此提交。


簡(jiǎn)而言之,這一切都?xì)w結(jié)為以下代碼:


func ListBoxScrollToSelected(listBox *gtk.ListBox) {

    // If there's selection

    if row := listBox.GetSelectedRow(); row != nil {

        // Convert the row's Y coordinate into the list box's coordinate

        if _, y, _ := row.TranslateCoordinates(listBox, 0, 0); y >= 0 {

            // Scroll the vertical adjustment to center the row in the viewport

            if adj := listBox.GetAdjustment(); adj != nil {

                _, rowHeight := row.GetPreferredHeight()

                adj.SetValue(float64(y) - (adj.GetPageSize()-float64(rowHeight))/2)

            }

        }

    }

}

上面的函數(shù)必須使用glib.IdleAdd()而不是在填充列表框的代碼中調(diào)用。


查看完整回答
反對(duì) 回復(fù) 2022-06-13
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

所以,我有同樣的問(wèn)題,但設(shè)法讓它在我的情況下工作。我認(rèn)為我的解決方案也很有可能對(duì)您有用。

由于該grab_focus方法不起作用,我開(kāi)始使用listbox_get_row_at_y. 非常不滿(mǎn)意,但希望它會(huì)奏效。而且..它沒(méi)有用,因?yàn)?code>get_row_at_y總是返回null,對(duì)于我提供的所有 y 值。而且我知道列表框不是空的。所以這讓我意識(shí)到我正在嘗試集中我剛剛添加到列表框中的一行。該行還沒(méi)有實(shí)現(xiàn),它無(wú)法集中,因?yàn)樗€沒(méi)有準(zhǔn)備好。

所以我更改了我的代碼來(lái)填充列表框,等待 100 毫秒 timeout,然后才調(diào)用grab_focus. 那行得通!

我實(shí)際上正在使用一個(gè)為我包裝超時(shí)調(diào)用的庫(kù),但我認(rèn)為您可以為此目的在“原始”gtk 中使用g_timeout_add 。

請(qǐng)注意,這意味著調(diào)用grab_focus已經(jīng)預(yù)先填充的列表框并且在屏幕上實(shí)現(xiàn)的項(xiàng)目應(yīng)該直接工作。如果這是你的情況,那么這對(duì)你沒(méi)有幫助。


查看完整回答
反對(duì) 回復(fù) 2022-06-13
  • 2 回答
  • 0 關(guān)注
  • 256 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)