tkinter滚动框架按钮调整框架大小

时间:2018-06-03 10:55:55

标签: python tkinter positioning

我创建了一个带有滚动条的Frame类(有帮助)。似乎工作得很好,但我希望按钮的大小适合框架的大小。现在,如果你看起来他们都聚集到左侧。我看了很多例子,这看起来很常见。下面是一些简单的运行代码,以便您可以看到问题。下面附有问题的图片。

谢谢。

func getAddressFromLatLon(pdblLatitude: String, pdblLongitude: String) -> String  {
    var addressString : String = ""
    var center : CLLocationCoordinate2D = CLLocationCoordinate2D()
    let lat: Double = Double("\(pdblLatitude)")!
    //21.228124
    let lon: Double = Double("\(pdblLongitude)")!
    //72.833770
    let ceo: CLGeocoder = CLGeocoder()
    center.latitude = lat
    center.longitude = lon

    let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)


    ceo.reverseGeocodeLocation(loc, completionHandler:
        {(placemarks, error) in
            if (error != nil)
            {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            }
            let pm = placemarks! as! [CLPlacemark]

            if pm.count > 0 {
                let pm = placemarks![0]
                print("ADDRESS \(pm.country)---\(pm.locality)---\(pm.subLocality)---\(pm.thoroughfare)---\(pm.postalCode)---\(pm.subThoroughfare)")

                if pm.subLocality != nil {
                    addressString = addressString + pm.subLocality! + ", "
                }
                if pm.thoroughfare != nil {
                    addressString = addressString + pm.thoroughfare! + ", "
                }
                if pm.locality != nil {
                    addressString = addressString + pm.locality! + ", "
                }
                if pm.country != nil {
                    addressString = addressString + pm.country! + ", "
                }
                if pm.postalCode != nil {
                    addressString = addressString + pm.postalCode! + " "
                }


            }
    })
    return addressString
}

enter image description here

1 个答案:

答案 0 :(得分:1)

实际上,您的按钮 正在填充框架。当您为不同的元素提供背景颜色时,您可以看到这一点。我把你的外框设为红色,画布为绿色,框架上的按钮为蓝色:

你可以看到它实际上是内部框架没有填满画布,而不是你的按钮没有填满画面。

要使框架填充画布,如this question的答案中所述,您可以在画布try { AssetManager assetManager = getAssets(); InputStream ims = assetManager.open("file.txt"); Gson gson = new Gson(); Reader reader = new InputStreamReader(ims); GsonParse gsonObj = gson.fromJson(reader, Response.class); } }catch(IOException e) { e.printStackTrace(); } 事件上进行绑定,以便在画布更大时将框架拉伸到画布大小比按钮的最小尺寸。要做到这一点,你必须在画布上保存放置框架的id:

<Configure>

为了确保在没有必要时没有水平滚动条,您可能希望稍微减小帧的宽度(self.canvas_frame = self.canvas.create_window(0, 0, window=self.frame, anchor=N+W) self.canvas.bind('<Configure>', self.canvas_changed) def canvas_changed(self, event): if self.frame.winfo_reqwidth() < self.canvas.winfo_width(): self.canvas.itemconfigure(self.canvas_frame, width=self.canvas.winfo_width()) )。